【发布时间】:2016-09-04 07:09:25
【问题描述】:
我正在制作一个客户端服务器应用程序。以前在应用程序中,如果客户端出现故障,服务器将尝试重新连接(即,如果服务器端的 recv() 返回 0 值,服务器将返回接受连接)。现在我想通过允许它连接到多个客户端来修改服务器。我想过使用poll(),这样服务器就可以检查每个客户端一段时间。我想知道poll 如何检查与客户端的连接是否丢失?
【问题讨论】:
标签: c tcp client-server polling
我正在制作一个客户端服务器应用程序。以前在应用程序中,如果客户端出现故障,服务器将尝试重新连接(即,如果服务器端的 recv() 返回 0 值,服务器将返回接受连接)。现在我想通过允许它连接到多个客户端来修改服务器。我想过使用poll(),这样服务器就可以检查每个客户端一段时间。我想知道poll 如何检查与客户端的连接是否丢失?
【问题讨论】:
标签: c tcp client-server polling
当使用多路复用 io 和 poll 时,您可以通过以下事件处理连接关闭:
POLLIN 当有数据要读取,并且当你调用read 或recv 函数时,确保你检查了返回值,通常返回值0 表示连接已关闭。这与您之前的单客户端版本相同。
POLLRDHUP表示对端已关闭连接,或关闭写入一半连接。
POLLERR 其他错误。
当这三个事件被触发时,说明客户端已经关闭了连接或者socket有错误,你通常关闭socket。
【讨论】: