1

可能重复:
在 Linux 中发送缓冲区为空的 Socket?

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

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

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

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

4

2 回答 2

3

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

于 2012-09-21T11:59:35.603 回答
0

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

于 2012-09-24T11:07:32.830 回答