假設我有一個TCP客戶端和一個TCP服務器。首先,客戶端向服務器發送一些數據,但服務器忙於做其他事情,所以它不會讀取這個連接。數據保存在服務器主機上的TCP接收緩衝區中。在這一點上,請幫我澄清以下不同情況下會發生什麼:關閉/關閉對TCP接收緩衝區的影響
- 服務器調用read之前,客戶端此連接上調用
close
。並且FIN
已經到達服務器TCP,並且服務器TCP已經發送了ACK
。此時,如果服務器在此套接字上調用read
,它將返回什麼?它是否返回TCP接收緩衝區中的未讀數據?還是隻返回0來表示EOF
,並且未讀數據被丟棄? - 在服務器呼叫
read
之前,客戶端在此連接上調用shutdown
和SHUT_WR
。並且FIN
已經到達服務器TCP,並且服務器TCP已經發送了ACK
。此時,如果服務器在此套接字上調用read
,它將返回什麼?它是否返回TCP接收緩衝區中的未讀數據?還是隻返回0來表示EOF
,並且未讀數據被丟棄? - 在服務器調用
read
之前,客戶端剛剛退出而不調用close
或shutdown
。並且客戶端主機中的TCP將發送FIN
,這個FIN
已經到達服務器TCP,並且服務器TCP已經發送了ACK
。此時,如果服務器在此套接字上調用read
,它將返回什麼?它是否返回TCP接收緩衝區中的未讀數據?還是隻返回0來表示EOF
,並且未讀數據被丟棄?