在 Go 中超时 TCP 握手的惯用方法
Idiomatic way to timeout TCP handshake in Go
Go 中使 TCP 会话超时的惯用方法是什么,例如初始协议握手?假设有一个处理 TCP 对话的 goroutine。我可以启动它,然后启动 time.After()
,然后为它们启动 select
,如果超时,继续做其他事情。
然而,这意味着 TCP goroutine 将在超时后继续保持 TCP 连接,即使没有人需要它。
要使初始连接超时,您可以使用 net.DialTimeout
,或者更具体地说,在 net.Dialer
上设置 Timeout
参数。
要在使用 TCP 连接时使个别操作超时,请在连接上使用 SetDeadline
, SetReadDeadline
, or SetWriteDeadline
。
如果您需要立即取消对连接的操作,Go 中的方法是 Close()
连接。连接对于并发操作是安全的,您可以从 goroutine 调用 Close()
而不是阻塞网络操作的 goroutine。
Go 中使 TCP 会话超时的惯用方法是什么,例如初始协议握手?假设有一个处理 TCP 对话的 goroutine。我可以启动它,然后启动 time.After()
,然后为它们启动 select
,如果超时,继续做其他事情。
然而,这意味着 TCP goroutine 将在超时后继续保持 TCP 连接,即使没有人需要它。
要使初始连接超时,您可以使用 net.DialTimeout
,或者更具体地说,在 net.Dialer
上设置 Timeout
参数。
要在使用 TCP 连接时使个别操作超时,请在连接上使用 SetDeadline
, SetReadDeadline
, or SetWriteDeadline
。
如果您需要立即取消对连接的操作,Go 中的方法是 Close()
连接。连接对于并发操作是安全的,您可以从 goroutine 调用 Close()
而不是阻塞网络操作的 goroutine。