ホームページ > バックエンド開発 > Golang > Go の「net」パッケージで TCP 接続の終了を検出するにはどうすればよいですか?

Go の「net」パッケージで TCP 接続の終了を検出するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-16 21:52:15
オリジナル
647 人が閲覧しました

How Can I Detect TCP Connection Closure in Go's `net` Package?

ネットパッケージを使用して TCP 接続の終了を判断する方法

問題:

実装時TCP サーバーの場合、クライアントがいつ接続を閉じるかを知ることが不可欠です。ネット パッケージを使用してこれを確認するにはどうすればよいですか?

答え:

閉じられた TCP 接続を検出するには、次の方法を使用できます:

one := make([]byte, 1)
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
  // Connection closed
} else {
  // Connection still open
}
ログイン後にコピー

このアプローチには以下が含まれます:

  1. シングルバイトバッファの作成(1 つ)。
  2. 接続 (c) の読み取り期限を現在時刻に設定して、即時読み取りを強制します。
  3. 接続からバイトを読み取ります。
  4. チェック中エラー; io.EOF の場合、接続は閉じています。

タイムアウト検出:

タイムアウトを検出するには、エラーがネットかどうかを確認できます。タイムアウトによるエラー。

if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
  // Timeout occurred
}
ログイン後にコピー

アップデート (Go 1.7) ):

Go 1.7 では、ゼロバイトの読み取りはすぐに返され、エラーにはなりません。これを考慮するには、少なくとも 1 バイトを読み取る必要があります。

以上がGo の「net」パッケージで TCP 接続の終了を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート