【发布时间】:2012-03-30 20:05:57
【问题描述】:
在linux中使用非阻塞(20毫秒周期)TCP连接,我遇到了问题:
当我从服务器端关闭套接字 [close(sd) 或 shutdown(sd,2);close(sd)] 时,客户端 poll() 不会收到任何 POLLHUP 事件。
当服务器从 shell 中被杀死时,会收到 POLLHUP。
如何在一两个周期内通知客户?
【问题讨论】:
-
如果您对答案感到满意,请将其标记为已接受。
在linux中使用非阻塞(20毫秒周期)TCP连接,我遇到了问题:
当我从服务器端关闭套接字 [close(sd) 或 shutdown(sd,2);close(sd)] 时,客户端 poll() 不会收到任何 POLLHUP 事件。
当服务器从 shell 中被杀死时,会收到 POLLHUP。
如何在一两个周期内通知客户?
【问题讨论】:
使用 POLLIN 表示 TCP 断开连接,并且在正常关闭的情况下 read() 将返回 0,或者 -1 和适当的错误(errno 不是 EINTR/EWOULDBLOCK)。
有些平台可能会使用 POLLHUP 发出信号,因此您可能也想处理这种情况。
【讨论】:
POLLHUP。不过没有提到SIGHUP。