如果数据包没有发送到另一个终端系统,则等待发送? C发送()

时间:2013-04-10 20:59:37

标签: c linux sockets networking send

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

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

测试将如下: 开始发送数据包,删除以太网,重新连接 谢谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

没有真正有效的方法来确定远程对等方是否对您的数据进行了处理。事实上,即使远程TCP确认您的数据并不意味着远程进程读取它。最简单的方法是实现一种应用层ACK,其中对等体发回一个字节信号&#34;好吧,得到它&#34;。

  • 您致电send并且几乎立即返回
  • 此时内核开始工作,试图推送数据
  • 您致电recv阻止
  • 远程端接收数据并发回一些数据,确认
  • 您的recv取消阻止

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