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