2012-03-17 92 views
2

我使用epoll作爲觸發的級別。根據recv(3),如果recv返回0「沒有消息可用於接收並且對等已經執行了有序關閉」。這是否意味着已收到整個請求並且套接字已在另一端關閉?套接字兩端已關閉?或者,只是整個請求已收到,並且套接字正在等待響應被寫入它?任何幫助將不勝感激。epoll recv返回值

根據What value will recv() return,聽起來好像recv返回0,連接在另一端關閉。如果是這種情況,那麼epoll方面需要做些什麼?撥打epoll_ctlEPOLL_CTL_DEL並致電close需要完全刪除插座嗎?

回答

4

這意味着您已經讀取了所有通過連接發送的數據,唯一剩下的就是一個TCP FIN,這可能是遠程關閉或關閉輸出的結果遙控器。你不能做太多的事情,但在這一點上關閉套接字,除非你知道對方只有關閉,在這種情況下,你仍然可以寫入套接字。你的應用協議決定了所有這些。

在TCP中沒有這樣的請求或響應。只有一個雙向字節流。