这个问题涉及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,似乎关闭服务器上的句柄仍然允许客户端读取发送给它的所有数据。我的测试证实了这一点,但也许我很幸运。关闭服务器上的句柄是否允许客户端在所有情况下读取数据?