非阻塞关闭 - 如何确保数据发送?

时间:2012-09-21 11:26:53

标签: c++ c linux sockets

  

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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