首页 > 解决方案 > 如何在 DialTCP 函数上设置截止日期并处理超时错误

问题描述

我正在创建与服务器的 TCP 连接,但我需要指定超时。

我怎样才能做到这一点?

这是简化的代码:

tcpserveraddr, err := net.ResolveTCPAddr("tcp", Serveraddr+":"+Serverport)
if err != nil {
    log.Printf("error during address relolution: %v\n", err)
}
serversocket, err := net.DialTCP("tcp", nil, tcpserveraddr)
if err != nil {
    log.Printf("error during serversocket.DialTCP(): %v\n", err)
}

标签: go

解决方案


最直接的选择是使用net.DialTimeout()

net.DialTimeout(tcpserveraddr.Network(), tcpserveraddr.String(), 5*time.Second)

您还可以创建一个net.Dialer,它可以让您更好地控制拨号选项,然后DialContext()与您自己的上下文一起使用(带超时):

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
var d net.Dialer
d.DialContext(ctx, tcpserveraddr.Network(), tcpserveraddr.String())

推荐阅读