非阻塞关闭 - 如何确保数据已发送
Non-blocking close - How to ensure data got send?
可能的重复项:
在 Linux 中发送空套接字的缓冲区?
我想创建一个套接字服务器,将一些数据发送到连接的客户端,然后再次断开他的连接。
我正在使用非阻塞套接字,所以我不知道如何确定所有数据是否至少被正确发送(发送?如果不再需要,我不想保持连接建立,因为我无法确保客户端自行断开连接。
目前我只是使用 shutdown() 和后来的 close() 关闭客户端。但是测试告诉我,客户端并不总是在连接关闭之前收到所有数据。
必须有一种方法可以确保在关闭非阻塞套接字上的连接之前发送所有数据,不是吗?希望我的问题足够清楚,你可以帮助我(:
在结束连接之前,您知道数据已发送的唯一方法是让对等方在应用程序协议中确认它。您可以通过在两端关闭输出,然后在两端读取 EOS,然后关闭两端的套接字来确保两端同时到达 EOS。
您可以在文件数据之前发送文件大小。关闭套接字时,只需检查文件大小并采取适当的操作来关闭或重新发送文件。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 如何确保C++函数在定义之前声明(如override关键字)
- 使用流处理接收到的数据
- 尝试使用while循环从文件中读取数据.还必须检查以确保第一个和唯一的值不是-1
- 是否要确保一个线程修改的任何数据类型的共享变量对其他线程可见
- 非阻塞关闭 - 如何确保数据已发送
- 如何确保类的每个数据成员都已复制到其复制构造函数中
- 增强串行化:通过套接字传输确保数据安全
- 如何确保自定义数据的boost::unorderede_set中没有重复
- 如何确保数据刷新到文件 IO (WriteFile()) 上的 HDD(未缓冲)
- C++ 如何确保复制构造函数不会修改原始对象的指针数据成员?
- 如何确保数据类型与C++中需要的数据类型一样大
- 如何确保fwrite后数据在磁盘上
- 如何确保迭代器模板形参与模板类的模板形参具有相同的数据类型
- 如何确保数据结构能适应大文件中的数据
- 困惑如何确保数据在IOStream中"Good"
- 如何确保数据在关闭fstream之前被写入磁盘?
- 提振.确保另一方接收到数据