2013-04-10 36 views
0

我正在使用發送Linux std套接字通過網絡寫一個數據包。發送呼叫,緩衝數據和「始終」返回值大於0.發送將問題傳遞到操作系統和較低級別。 如何停止發送呼叫並等待將包傳送到其他終端系統?等待TCP ACK或類似的東西?如果數據包沒有發送到其他終端系統,等待發送? C發送()

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

測試會喜歡: 開始發送數據包,取出以太網,重新連接。
謝謝,抱歉我的英語不好。

回答

1

沒有真正有力的方法來確定遠程對等設備是否能夠檢測到您的數據。實際上,即使遠程TCP檢測到的數據並不意味着遠程進程讀取了它。最簡單的方法是實現一種應用層ACK,其中對端發回一個字節的信號「OK,明白了」。

  • 你打電話send,它幾乎立即
  • 返回此時內核開始工作,努力推動着數據
  • 你叫recv該塊
  • 遠程端接收數據併發送一些數據備份,承認它
  • recv疏導

此時,您可以確定遠程端收到您的數據。