Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果数据包未发送到另一端系统,是否等待发送?C send()_C_Linux_Sockets_Networking_Send - Fatal编程技术网

如果数据包未发送到另一端系统,是否等待发送?C send()

如果数据包未发送到另一端系统,是否等待发送?C send(),c,linux,sockets,networking,send,C,Linux,Sockets,Networking,Send,我正在使用Linux std套接字上发送来通过网络写入数据包。发送调用、缓冲数据和“始终”返回大于0的值。将问题发送到操作系统和较低级别。 如何停止发送呼叫并等待数据包传送到另一端系统?等待TCP确认之类的 if (send(broker->socket, packet, sizeof(packet), 0) < sizeof(packet)){ return -3; } if(发送(代理->套接字,数据包,sizeof(数据包),0)

我正在使用Linux std套接字上发送来通过网络写入数据包。发送调用、缓冲数据和“始终”返回大于0的值。将问题发送到操作系统和较低级别。 如何停止发送呼叫并等待数据包传送到另一端系统?等待TCP确认之类的

if (send(broker->socket, packet, sizeof(packet), 0) < sizeof(packet)){
 return -3;
}   
if(发送(代理->套接字,数据包,sizeof(数据包),0)
测试内容如下: 开始发送数据包,移除以太网,重新连接。

谢谢,对不起,我的英语不好

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

  • 您调用
    send
    ,它几乎立即返回
  • 此时内核开始工作,试图推送数据
  • 您调用
    recv
    哪个块
  • 远程端接收数据并发回一些数据,确认数据
  • 您的
    recv
    解锁
此时,您可以确定远程端收到了您的数据