Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 为什么会有';s网络上没有isClosed函数。套接字_Sockets_Haskell_Networking - Fatal编程技术网

Sockets 为什么会有';s网络上没有isClosed函数。套接字

Sockets 为什么会有';s网络上没有isClosed函数。套接字,sockets,haskell,networking,Sockets,Haskell,Networking,模块中有诸如等功能,但没有检查插座是否关闭的isClosed功能 我正在编写一个需要关闭套接字连接的模块: import qualified Network.Socket as Socket -- ... close Connection{connSock, serverSock} = do Socket.close connSock Socket.close serverSock 问题是,如果套接字已经关闭(例如在客户端),我将得到以下错误: epollControl:

模块中有诸如等功能,但没有检查插座是否关闭的
isClosed
功能

我正在编写一个需要关闭套接字连接的模块:

import qualified Network.Socket as Socket

-- ...

close Connection{connSock, serverSock} = do
    Socket.close connSock
    Socket.close serverSock
问题是,如果套接字已经关闭(例如在客户端),我将得到以下错误:

epollControl: does not exist (No such file or directory)
因此,我现在正在检查插座是否已打开,然后再将其关闭:

  closeIfOpen sock = do
      let MkSocket _ _ _ _ stMV = sock
      st <- readMVar stMV
      case st of
          Closed -> return ()
          _ -> Socket.close sock
closeIfOpen sock=do
让MkSocket u stMV=sock
st返回()
_->插座。闭合插座

虽然这是可行的,但是缺少
isClosed
函数让我怀疑上面的代码是否有一些我不知道的潜在问题(例如它有一个竞争条件,但我猜
isConnected
isBound
也应该有它……).

我想维护人员可以回答这个问题。您要求的功能仍然有问题,因为您可以进行竞赛,让客户端在检查连接是否关闭和调用关闭之间关闭连接。我很惊讶这首先会导致异常,但是为什么不捕获并忽略异常呢?如果异常是非唯一的,则提交一个问题。