当服务器崩溃时,Socet recv会挂起

时间:2014-12-10 07:32:38

标签: sockets

我正在使用Windows和MAC上的套接字处理客户端服务器程序,并且当前面临一个问题,当服务器程序使用任务管理器崩溃/终止时,客户端调用recv会永远阻塞。我将一些数据发送到服务器并使用recv异步等待回复。此回复将在一段时间后来自服务器,无法确定。 当插座的另一端死亡时,我期待来自recv的错误。不知道如何处理这种情况。

建议?

谢谢,

2 个答案:

答案 0 :(得分:1)

使用setsockopt()SO_RCVTIMEO选项设置读取超时,将其设置为合理值。

答案 1 :(得分:0)

如果您正在使用TCP并且对等套接字正确关闭并且两个系统之间的通信正常工作(没有断线等),则您的recv不应该挂起(而是指示已关闭的连接)。在UNIX中,即使进程崩溃或被杀死,内核也会正确关闭套接字,但在这种情况下我不知道Windows的行为。

如果您使用UDP进行通信,

recv仍将挂起,因为没有显式连接关闭。