我在Haskell中编写了一个服务器,它将消息传递给连接的客户端。如果连接从其中一个客户端掉线,我的服务器需要几分钟才能注意到客户端已经消失。 Haskell中的hGetLine
是阻塞的,如果它仍在监听的话我无法关闭该线程(有一种异步方式,但它对我不起作用)。如果我从该客户端写入损坏的管道,我在Java中得到一个损坏的管道异常,并且必须创建一个新的套接字。实现心跳以检查连接是否仍然打开可能有效,但如果有两个telnet会话连接到服务器,则几乎不可能立即回复来自服务器的心跳消息。
如果客户端断开连接,是否有任何方法可以快速注意到?有没有办法使用SIG_IGN
忽略Java中的损坏的管道异常并在恢复Internet连接后写入同一个管道?