在Golang中执行net.DialTCP时如何设置超时时间?

作为 net.DialTCP </ code>似乎是获取 net.TCPConn的唯一方法 </ code>,我不确定在执行 DialTCP </ code>时如何设置超时。 https://golang.org/pkg/net/#DialTCP </ p> \ n

  func connectAddress(addr * net.TCPAddr,wg * sync.WaitGroup)错误{
start:= time.Now()
conn,err:= net.DialTCP(“ tcp” ,nil,addr)
如果错误!= nil {
log.Printf(“地址失败:%s,err:%s”的拨号,addr.String(),err.Error())
返回错误
}
省略:= time.Since(start)
log.Printf(“ to address to%s in%dms”,addr.String(),elasped.Nanoseconds()/ 1000000)
conn。 Close()
wg.Done()
返回nil
}
</ code> </ pre>
</ div>

展开原文

原文

net.DialTCP 似乎是获取net.TCPConn的唯一办法,我不确定在执行 DialTCP时如何设置超时。
func connectAddress(addr *net.TCPAddr, wg *sync.WaitGroup) error {
    start := time.Now()
    conn, err := net.DialTCP("tcp", nil, addr)
    if err != nil {
        log.Printf("Dial failed for address: %s, err: %s", addr.String(), err.Error())
        return err
    }
    elasped := time.Since(start)
    log.Printf("Connected to address: %s in %dms", addr.String(), elasped.Nanoseconds()/1000000)
    conn.Close()
    wg.Done()
    return nil
}

2个回答



使用 net.Dialer < / a>与超时最后期限字段设置。 </ p>

  d:= net.Dialer {Timeout:timeout} 
conn,err:= d.Dial(“ tcp”,addr)
if err!= nil {
//处理错误
}
</ code> </ pre>

一个变种是调用 Dialer.DialContext 截止日期超时应用于上下文。</ p>

将类型断言设置为 * net.TCPConn </ code> 如果您特别需要该类型而不是 net.Conn </ code>:</ p>

  tcpConn,好的:= conn。(* net.TCPConn)
< / code> </ pre>
</ div>

展开原文

原文

Use net.Dialer with either the Timeout or Deadline fields set.

d := net.Dialer{Timeout: timeout}
conn, err := d.Dial("tcp", addr)
if err != nil {
   // handle error
}

A variation is to call Dialer.DialContext with a deadline or timeout applied to the context.

Type assert to *net.TCPConn if you specifically need that type instead of a net.Conn:

tcpConn, ok := conn.(*net.TCPConn)

doumou8527
doumou8527 是否将Timeout字段计为curl的--connect-timeout的对应字段? 还是像--max-time?
一年多之前 回复



一个人可以使用 net.DialTimeout </ code>:</ p>

   func DialTimeout(网络,地址字符串,超时时间。Duration)(Conn,错误)
DialTimeout的作用类似于Dial,但需要超时。

如果需要,超时包括名称解析。 使用TCP时,
地址参数中的
主机解析为多个IP地址,
超时会分散在每个连续的拨号上,从而为每个拨号分配了适当的
的连接时间。

有关网络和地址参数的说明,请参见func Dial。
</ code> </ pre>
</ div>

展开原文

原文

One can use net.DialTimeout:

func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
    DialTimeout acts like Dial but takes a timeout.

    The timeout includes name resolution, if required. When using TCP, and the
    host in the address parameter resolves to multiple IP addresses, the timeout
    is spread over each consecutive dial, such that each is given an appropriate
    fraction of the time to connect.

    See func Dial for a description of the network and address parameters.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐