我希望能够停止侦听 Linux 中的服务器套接字,并确保从客户端角度打开的所有连接都得到正确处理并且不会突然关闭(即:接收 ECONNRESET)。
ie:
sock = create_socket();
listen(sock, non_zero_backlog);
graceful_close(sock);
如果认为调用 close() 并处理已接受的套接字就足够了,但内核积压中可能存在打开的连接,如果您在服务器套接字上调用 close() ,这些连接将突然关闭。
做到这一点的唯一有效方法(我发现)是:
prevent accept()
添加更多客户
-
在某处有一个打开的套接字列表,并等待它们全部正确关闭,这意味着:
using shutdown()
告诉客户端您将不再在该套接字上工作
call read()
等待一段时间以确保所有客户都已发送过来
其间已被拉动
然后使用close()
释放每个client socket.
然后,您就可以安全地close()
监听套接字。
您可以(并且应该)使用超时来确保空闲连接不会永远持续。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)