首页 文章

非阻塞关闭 - 如何确保数据发送? [重复]

提问于
浏览
1

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

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

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

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

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

2 回答

  • 0

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

  • 3

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

相关问题