2012-08-27 49 views
0

我有一種情況 -Linux TCP堆棧 - 通知對等復位或斷開連接

在建立狀態的A - > B之間存在TCP連接。 A向B發送幾個字節,然後自行終止。 B既不在執行send()或recv()。

我想知道是否有辦法知道連接中斷。

我知道,對於斷開的連接,recv()返回'0'。但是在上面的情況中--A向B發送了一些數據,所以第一個(一個或多個)recv()會將我發送的數據返回給我,最後我會得到recv()== 0.但是我想知道斷開連接,而不必從recv-buffer中抽出所有數據。

  1. 我想獲得關於傳入FIN/RST包的通知
  2. 我必須保持活動啓動,所以我想獲得通知時,保留的數據包是由合作伙伴
  3. 沒有回覆

感謝, 桑迪普

回答

0

不管你想要去檢查帶電連接,您可以嘗試send(fd, buf, 0, 0)即發送0字節的數據。如果連接中斷,則會失敗。

+0

如果cconnection *已知已被破壞,則可能會失敗。例如,如果已經有重傳超時或收到RST。此技術不會檢測到成功傳輸後剛斷開的連接。 – EJP

+0

此外......當連接斷開時,我需要從堆棧中進行一些「通知」。該設計是這樣的,它不適合通過send()或recv()查詢堆棧。 – pppsandeep

+0

@pppsandeep不幸的是,TCP中沒有這樣的東西。 – EJP