【发布时间】:2019-11-30 22:06:53
【问题描述】:
我有一个经典的 TCP 服务器,它接受与系统调用 accept() 的连接。
在特定情况下,我接受了 n 个连接,因此创建了 n 个子节点。
当服务器上发生通用事件 A 时,我需要停止连接。在服务器和客户端中关闭套接字的最佳方法是什么?
现在我这样做:当事件 A 发生时,服务器向客户端发送特定消息,然后执行close()。客户端读取套接字,如果消息是特殊消息,它将关闭。
但是如果我需要在客户端做其他事情,这种方式是非常糟糕的。我能做什么?
【问题讨论】:
-
您可以从每个客户端的进程模型切换到使用
epoll/kqueue/poll/select(IO 事件监控功能)管理连接的单个进程。您将节省资源并使优雅地管理服务器范围的事件(例如关闭)变得更加容易。
标签: c sockets tcp client-server