在Go中超时TCP握手的惯用方法

时间:2015-05-25 16:44:48

标签: tcp go timeout

Go中超时TCP会话的惯用方法是什么,例如初始协议握手?让我们说有一个处理TCP对话的goroutine。我可以启动它,然后为它们启动time.After(),然后select,如果超时,则继续执行其他操作。

然而,这意味着TCP goroutine将在超时后继续保持TCP连接保持活动,即使没有人需要它。

1 个答案:

答案 0 :(得分:4)

要使初始连接超时,请使用net.DialTimeout,或者更具体地说,在net.Dialer上设置Timeout参数。

要在TCP连接正在使用时对其进行超时,请在连接上使用SetDeadlineSetReadDeadlineSetWriteDeadline

如果您需要立即取消对连接的操作,在Go中执行此操作的方法是Close()连接。连接对于并发操作是安全的,您可以从除网络操作阻塞之外的goroutine调用Close()