2014-04-02 30 views
2

當通過套接字連接兩個端點(A & B),並且端點A斷開連接時,端點B是否會終止接收關於斷開連接的通知?當套接字連接中的一個端點斷開連接時會發生什麼

終點B知道連接丟失的觸發器是什麼?

當他將數據發送到終點A時,他會收到關於斷開連接的通知嗎?

請將答案重點放在TCP協議的屬性上,忽略特定的語言實現。

回答

0

這取決於你的意思是'斷線'。如果你的意思是A正確地關閉了套接字,那麼B在讀取時會得到一個流結束符(recv()返回零)。如果你的意思是它中止,根據相關平臺會發生各種各樣的事情,但很可能B會得到在send()幾個呼叫之後的ECONNRESET

0

當客戶機(A)突然斷開或崩潰而服務器(B)在發送的雖然write()信息塊,服務器將可能接收EPIPESIGPIPE信號。該信號通常在信號後面加上RESET信號。

RESET是TCP告訴發件人接收方不願接受更多數據的方式。但是由於發送方已經傳輸了數據塊,因此在知道信號之前它會看到EPIPESIGPIPE信號。

以下是link,以幫助您更好地理解。

+0

另一個[類似的問題](http://stackoverflow.com/questions/2974021/what-does-econnreset-mean-in-the-context-of-an-af-local-socket)其中詳細解釋的東西。 – vasanth89

+0

那它是哪一個? RESET先於還是之後?你在這裏說過。 – EJP

+0

'RESET'在'EPIPE'信號之前。服務器可能會看到'EPIPE'信號,因爲它處於發送數據的中間,並且可能不知道客戶端不願接受數據(它早先通過'RESET'信號通知它) – vasanth89

相關問題