2016-03-03 67 views
0

我想了解一些關於TCP /網絡的基礎知識。終止連接TCP

比方說,我有客戶端發送HTTP請求到服務器通過快速連接下載大文件。

curl http://downloadfile > file 

服務器將大文件寫入套接字。如果服務器崩潰/死亡,即使服務器剛剛死亡,客戶端是否仍然可以繼續接收文件?

換句話說,在客戶端在socket上獲取數據之前,客戶端如何知道連接已經終止?

我猜測一旦沒有新的數據在套接字上就會超時,但是在客戶端收到所有數據之前整個文件是否可以傳輸到套接字上呢?

回答

0

即使服務器剛剛死亡,客戶端是否可以繼續接收文件?

當然不是。它可以讀取套接字接收緩衝區中的任何內容以及任何正在傳輸的數據,就是這樣。

換句話說,在客戶端在socket上獲取數據之前,客戶端如何知道連接已經終止?

它可能不知道。它可能永遠坐在那裏read()。除非它有讀取超時。

我猜想,這一次將沒有新的數據套接字

上超時,當且僅當客戶端已設置讀超時。

但是,在客戶端收到所有數據之前,整個文件是否可以傳輸到套接字上?

還有服務器。有服務器的套接字發送緩衝區。如果服務器崩潰,則兩者都不存在爭用。有客戶端的套接字接收緩衝區,但這在邏輯上是客戶端的一部分:它保存已到達但尚未被應用程序讀取的數據。它的規模有限。

+0

所以我有一個客戶端和服務器之間的連接,我關閉了服務器和客戶端正在下載的文件繼續下載幾分鐘更多 - 這將是什麼解釋?客戶端套接字接收緩衝區中是否仍有尚未被應用程序讀取的數據? – K2xL