【问题标题】:How to send a message before closing TCP connection [POSIX]如何在关闭 TCP 连接之前发送消息 [POSIX]
【发布时间】:2016-07-31 16:34:11
【问题描述】:

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

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

最好的方法是什么?

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

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

有没有更好的方法?

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

【问题讨论】:

    标签: c sockets tcp posix


    【解决方案1】:

    服务器应该:

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

    【讨论】:

    • 酷,有道理。
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 2021-02-26
    • 2015-01-09
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多