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

标签 c++ c linux sockets

<分区>

Possible Duplicate:
Send buffer empty of Socket in Linux?

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

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

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

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

最佳答案

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

关于c++ - 非阻塞关闭 - 如何确保数据已发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529594/

相关文章:

c - 在 C 中添加两个 float 组的有效方法?

c - : sending UDP packet using Sendto() got "message too long"如何解决

c++ - 简单地重命名 cpp 中的文件,无需在其中写入任何内容

linux - 如何在 Linux 中扫描特定的 repo /文件夹并删除生成的所有其他内容

linux - 可执行文件在Linux上删除自身

c++ - 创建进程默认浏览器

c++ - 在 Linux 上构建静态 C++ 库 - 我需要链接到其他库吗?

C++11 从相同类类型的构造函数调用构造函数

c++ - Opencv,在图像中的对象周围绘制一个框

ruby-on-rails - 将 Rails 5 部署到 Linux 服务器