gpt4 book ai didi

c - TCP服务器停止连接

转载 作者:行者123 更新时间:2023-11-30 16:15:19 27 4
gpt4 key购买 nike

我有一个经典的 TCP 服务器,它接受通过系统调用 accept() 的连接。在特定情况下,我接受了 n 个连接,因此创建了 n 个子级。当服务器上发生通用事件 A 时,我需要停止连接。在服务器和客户端中关闭套接字的最佳方法是什么?现在我这样做:当事件A发生时,服务器向客户端发送特定消息,然后执行close()。客户端读取套接字,如果消息是特殊消息,则关闭。但如果我需要在客户端做其他事情,这种方式就非常糟糕了。我能做什么?

最佳答案

“创建了 n 个子进程”我假设您指的是n 个子进程,每个子进程处理与一个客户端程序的 TCP 连接?

如果是这样,处理它的一种方法是让服务器的父进程跟踪它所生成的子进程的进程 ID(由 fork() 返回)(通过列表或查找表或类似的)。然后,当您需要关闭特定连接时,服务器的父进程可以调用kill(the_child_process_id, SIGTERM) 或类似方法来让子进程尽快离开。 (SIGTERM 询问得很好;如果你想使用全核,你可以指定 SIGKILL 来代替)。

无论如何,一旦服务器上的子进程收到信号并退出,操作系统将确保服务器端的 TCP 连接已关闭,然后客户端的操作系统将收到 TCP 连接已关闭的通知已关闭,并且基于此,客户端(如果正确编码以处理远程关闭连接,即通过关闭自己的 TCP 套接字来响应 recv() 返回 0)将执行以下操作也是正确的事情。

关于c - TCP服务器停止连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154354/

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