net.Listen()
クライアントからのTCP接続をリッスンするために使用しています。
クライアントが接続を確立すると、Handler(conn net.Conn)
それを処理します。
func Handler(conn net.Conn) {
read_len, err := conn.Read(request)
if err != nil {
if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
fmt.Println(neterr)
PILOG("Client timeout!", PILOGWARNING)
conn.Close()
return
}
}
DISCONNECT
テストクライアントを使用して接続し、メッセージを送信せずにクライアントを突然終了しました。私のサーバーは、タイムアウトに達したときに接続を閉じる必要がありますが、長い待ち時間の後では決して起こりません。
私も試してみましconn.SetReadDeadline(time.Now())
たが、まだうまくいかないようです。では、go のデフォルトの TCP タイムアウトとはどのようなもので、どのように設定すればよいのでしょうか?
netstat -n
クライアントを殺した後、私も使用して以下の結果を得ました:
tcp4 0 0 127.0.0.1.12345 127.0.0.1.57296 CLOSE_WAIT
とはCLOSE_WAIT
どういう意味ですか?