【问题标题】:Non-blocking close - How to ensure data got send? [duplicate]非阻塞关闭 - 如何确保发送数据? [复制]
【发布时间】:2012-09-24 19:07:32
【问题描述】:

可能重复:
Send buffer empty of Socket in Linux?

我想创建一个套接字服务器,向正在连接的客户端发送一些数据并再次断开连接。

我正在使用非阻塞套接字,所以我不知道如何确定所有数据是否至少已正确发送(发送?)(简而言之:我的发送缓冲区中没有更多数据)。 如果不再需要,我不想保持连接建立,因为我无法确保客户端自行断开连接。

目前我只是使用shutdown() 和稍后的close() 关闭客户端。但测试表明,客户端并不总是在连接关闭之前收到所有数据。

也必须有一种方法来确保在关闭非阻塞套接字上的连接之前发送所有数据,不是吗?希望我的问题足够清楚,您可以帮助我(:

【问题讨论】:

标签: c++ c linux sockets


【解决方案1】:

在结束连接之前,您可以知道您的数据已发送的唯一方法是让对等方在应用程序协议中确认它。可以通过关闭两端输出,然后两端读取到EOS,然后关闭两端的socket,来保证两端同时到达EOS。

【讨论】:

    【解决方案2】:

    您可以在文件数据之前发送文件大小。关闭套接字时,只需检查文件大小并采取适当的措施来关闭或重新发送文件....

    【讨论】:

      猜你喜欢
      • 2012-11-29
      • 2014-02-17
      • 2011-05-19
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2011-05-25
      相关资源
      最近更新 更多