0
如果它不在兩個方向關閉,它會永遠關閉 - 無論過期定時器? - 它可以半關閉,但如果只有一個啓動close(),tcp連接可以終止嗎?在tcp連接終止
換句話說: 在TCP連接終止中 - 當只有客戶端啓動關閉但服務器不關閉時,能否完全關閉連接? 或者可以通過兩種方式獨立關閉tcp連接?
如果它不在兩個方向關閉,它會永遠關閉 - 無論過期定時器? - 它可以半關閉,但如果只有一個啓動close(),tcp連接可以終止嗎?在tcp連接終止
換句話說: 在TCP連接終止中 - 當只有客戶端啓動關閉但服務器不關閉時,能否完全關閉連接? 或者可以通過兩種方式獨立關閉tcp連接?
每個對等體可以獨立於另一個關閉TCP連接,並且對等體在嘗試從對等體讀取時獲取EOF(例如,沒有更多字節),或者在嘗試寫入到對等體時獲得ECONNRESET或EPIPE連接被對等關閉,但只有當套接字知道對方不想接收更多數據時,請參見下文。
關閉連接實際上是兩個部分組成:
shutdown(sock,SHUT_WR)
。在這種情況下,內核將向對等體發送一個FIN,以表明不再有數據會跟隨。從對等體讀取將返回EOF。shutdown(sock,SHUT_RD)
。在這種情況下,最初不會將信息發送給對等方,但是如果從對等方接收到數據,它們將被RST拒絕。close()
的呼叫因此等同於關閉連接的兩側同時(SHUT_RDWR
)。
請詳細說明,我不清楚。 – peterh 2014-11-08 20:20:42
您正在使用很多在上下文中不清楚的術語。例如,當你說「在兩個方向上關閉」時,你的意思是每一方都調用'close'?或者你的意思是每個TCP連接的兩個方向(這是一個雙向流,對吧?)關機?當你說「半封閉」時,你的意思是一方封閉了流的兩個方向?或者你的意思是一方關閉了發送方向,但接收方向仍然打開?你的問題充滿了模糊的術語,使你無法理解你在問什麼。 – 2014-11-08 20:26:11
而且,更模糊的術語「啓動關閉」意味着它稱爲「關閉」?還是意味着它調用'shutdown'來表明它不會再發送?或者是其他東西? – 2014-11-08 20:27:46