Go中超时TCP会话的惯用方法是什么,例如初始协议握手?让我们说有一个处理TCP对话的goroutine。我可以启动它,然后为它们启动time.After()
,然后select
,如果超时,则继续执行其他操作。
然而,这意味着TCP goroutine将在超时后继续保持TCP连接保持活动,即使没有人需要它。
答案 0 :(得分:4)
要使初始连接超时,请使用net.DialTimeout
,或者更具体地说,在net.Dialer
上设置Timeout
参数。
要在TCP连接正在使用时对其进行超时,请在连接上使用SetDeadline
,SetReadDeadline
或SetWriteDeadline
。
如果您需要立即取消对连接的操作,在Go中执行此操作的方法是Close()
连接。连接对于并发操作是安全的,您可以从除网络操作阻塞之外的goroutine调用Close()
。