如何在关闭TCP连接之前发送消息[POSIX]

时间:2016-04-10 17:24:54

标签: c sockets tcp posix

我有一个标准的客户端服务器情况。客户端连接到服务器,服务器使用select()(或类似)管理多个客户端连接。一切都使用POSIX系统级网络API。

有时服务器需要关闭连接。我希望服务器能够在关闭套接字之前向客户端发送消息,以通知客户端关闭连接的原因。

最好的方法是什么?

直接的方法是简单地让服务器写入消息然后关闭(close()),但我认为这是有问题的,因为客户端可能会因连接而产生写入错误在客户端有机会读取服务器写入的最终消息之前,服务器已关闭。

是这种情况,还是我可以确定客户端在读完所有内容之后才会出现写入错误?

有更好的方法吗?

如果可能,我更倾向于仅基于POSIX规范的解决方案。

1 个答案:

答案 0 :(得分:2)

服务器应该:

  1. 写信息。
  2. 通过调用shutdown来关闭连接的写入端。
  3. 继续读取连接,直到检测到正常关闭,以便读取客户端发送的所有数据。