gpt4 book ai didi

c - Linux 中的优雅关闭服务器套接字

转载 作者:IT王子 更新时间:2023-10-29 00:01:05 25 4
gpt4 key购买 nike

我希望能够停止监听 Linux 中的服务器套接字,并确保从客户端的角度来看所有打开的连接都得到正确处理而不是突然关闭(即:接收 ECONNRESET)。

即:

sock = create_socket();
listen(sock, non_zero_backlog);
graceful_close(sock);

如果认为调用 close() 并处理已经接受的套接字就足够了,但内核积压中可能存在打开的连接,如果您在服务器套接字上调用 close() ,这些连接将突然关闭。

最佳答案

唯一可行的方法(我发现)是:

  1. 阻止 accept() 添加更多客户端

  2. 在某处有一个打开的套接字列表,并等待它们全部正确关闭,这意味着:

    • 使用 shutdown() 告诉客户端您将不再使用该套接字

    • 调用read()一段时间,确保所有客户端都已发送其间已拉出

    • 然后使用 close() 释放每个 client 套接字。

  3. 然后,您可以安全地close() 监听套接字。

您可以(并且应该)使用超时来确保空闲连接不会永远持续下去。

关于c - Linux 中的优雅关闭服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9681531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com