首頁 > 後端開發 > Golang > 如何在 Go 的 net 套件中可靠地偵測 TCP 連線關閉?

如何在 Go 的 net 套件中可靠地偵測 TCP 連線關閉?

Patricia Arquette
發布: 2024-12-19 04:58:16
原創
364 人瀏覽過

How to Reliably Detect TCP Connection Closure in Go's `net` Package?

在 Net Package 中偵測 TCP 連線關閉

在 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))
}
登入後複製

說明:

  • SetReadDeadline 設定一個時間,超過該時間讀取操作將失敗並出現逾時錯誤。 (EOF) 錯誤。 >
  • 超時檢測:
  • 對於超時檢測,可以使用以下程式碼使用:

這會檢查錯誤是否為net.Error,其中包含Timeout()等附加資訊。 >在 Go 1.7 及更高版本中,零位元組讀取立即返回,不會出現錯誤。

以上是如何在 Go 的 net 套件中可靠地偵測 TCP 連線關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板