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