【问题标题】:Idiomatic way to timeout TCP handshake in Go在 Go 中超时 TCP 握手的惯用方法
【发布时间】:2015-05-25 16:44:48
【问题描述】:

Go 中使 TCP 会话超时的惯用方式是什么,例如初始协议握手?假设有一个处理 TCP 会话的 goroutine。我可以启动它,然后启动time.After(),然后为它们两个启动select,如果超时,继续做其他事情。

但是,这意味着 TCP goroutine 将在超时后继续保持 TCP 连接处于活动状态,即使没有人需要它。

【问题讨论】:

    标签: tcp go timeout


    【解决方案1】:

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

    要在 TCP 连接正在使用时使单个操作超时,请在连接上使用 SetDeadlineSetReadDeadlineSetWriteDeadline

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多