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

标签 c sockets tcp posix

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

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

最好的方法是什么?

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

是这样吗,或者我可以确定客户端在读取所有内容之前不会收到写入错误吗?

有更好的方法吗?

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

最佳答案

服务器应该:

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

关于c - 如何在关闭 TCP 连接之前发送消息 [POSIX],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533028/

相关文章:

mysql - 使用 C API 高效创建非常大的 mysql INSERT 查询

C 顶点数组错误值

Python,为什么在使用 TCP 套接字时出现错误 10035(在服务器上)和 10053(在客户端上)?

sockets - 当数据发送速度快于处理速度时,套接字将如何操作?

sockets - TCP 套接字和已连接的 UDP 套接字之间的区别

c - windows中 "./"相当于 ".exe"扩展?

c - 如何在 ImageMagick Core 中从图像中提取图像信息

c# - 单声道兼容网络/套接字库

java - 通过线程与多客户端服务器

java - 将 UDP 与 NIO 一起使用有什么意义?