在 TCP 伺服器中,確定客戶端何時關閉連線至關重要。本文探討如何在 net 套件中有效地偵測到這一點。
問題中建議的方法,依賴帶有錯誤檢查的讀取或寫入操作,不建議。相反,更可靠的方法是設定讀取截止時間並檢查特定的錯誤條件。
推薦方法:
以下程式碼片段,摘自「最佳方法」可靠地偵測 TCP連接已關閉”線程,演示了建議的方法:
one := make([]byte, 1) c.SetReadDeadline(time.Now()) if _, err := c.Read(one); err == io.EOF { l.Printf(logger.LevelDebug, "%s detected closed LAN connection", id) c.Close() c = nil } else { var zero time.Time c.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) }
說明:
這會檢查錯誤是否為net.Error,其中包含Timeout()等附加資訊。 >在 Go 1.7 及更高版本中,零位元組讀取立即返回,不會出現錯誤。
以上是如何在 Go 的 net 套件中可靠地偵測 TCP 連線關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!