我有一个标准的客户端服务器情况。客户端连接到服务器,服务器使用 select()
(或类似方法)管理多个客户端连接。一切都使用 POSIX 系统级网络 API。
有时服务器需要关闭一个连接。我希望服务器能够在关闭套接字之前向客户端发送消息,以告知客户端连接关闭的原因。
最好的方法是什么?
直接的方法是简单地让服务器写入消息然后关闭 (close()
),但我想这是有问题的,因为客户端可能会收到写入错误由于连接已被服务器关闭,在客户端有机会读取服务器写入的最终消息之前。
是这样吗,或者我可以确定客户端在读取所有内容之前不会收到写入错误吗?
有更好的方法吗?
如果可能,我更喜欢仅基于 POSIX 规范的解决方案。
最佳答案
服务器应该:
- 写消息。
- 通过调用
shutdown
关闭连接的写入端。 - 继续从连接读取,直到它检测到正常关闭,以便读取客户端发送的所有数据。
关于c - 如何在关闭 TCP 连接之前发送消息 [POSIX],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533028/