关闭客户端 - 服务器应用程序中的套接字和句柄

时间:2016-09-07 07:52:54

标签: sockets haskell io network-programming handle

这个问题涉及Haskell中的Network库。

我有一个简单的客户端 - 服务器应用程序。服务器获取套接字,接受那里的连接,并分叉服务器线程来处理请求:

sock <- listenOn port
(handle, _, _) <- accept socket
forkFinally (serve handle) (_ -> hClose handle)
-- Upon termination of the main thread I perform a 'sClose sock' as well

客户端连接到服务器,并读取和写入句柄(如服务器所做的那样):

handle <- connectTo host port
-- Read and write on 'handle'

现在我的问题是客户端在完成与服务器的交互时是否应该关闭句柄。

其次,服务器线程在收到"end"字符串时终止,但在关闭句柄之前发送消息"bye"。看similar questions,似乎关闭服务器上的句柄仍然允许客户端读取发送给它的所有数据。我的测试证实了这一点,但也许我很幸运。关闭服务器上的句柄是否允许客户端在所有情况下读取数据?

0 个答案:

没有答案