0

我在 Linux 标准套接字上使用发送通过网络写入数据包。发送调用,缓冲数据并“总是”返回大于 0 的值。发送将问题传递给操作系统和较低级别。如何停止发送调用并等待数据包传送到另一个端系统?等待 TCP ACK 或类似的东西?

if (send(broker->socket, packet, sizeof(packet), 0) < sizeof(packet)){
 return -3;
}   

测试将像:开始发送数据包,移除以太网,重新连接。
谢谢,对不起我的英语不好。

4

1 回答 1

1

没有真正可靠的方法可以确定远程对等方是否确认了您的数据。事实上,即使远程 TCP 确认您的数据并不意味着远程进程读取它。最简单的方法是实现一种应用层 ACK,其中对等方发回一个字节信号“ok, got it”。

  • 你打电话send,它几乎立即返回
  • 此时内核开始工作,尝试推送数据
  • 你调用recv哪些块
  • 远程端接收数据并发送回一些数据,确认它
  • 你的recv解锁

此时您可以确定远程端收到了您的数据。

于 2013-04-10T21:02:39.103 回答