2017-11-05 27 views
1

net.TCPConnを取得する唯一の方法のようですが、私はDialTCPを実行中にタイムアウトを設定する方法がわかりません。設定TimeoutまたはDeadlineフィールドのいずれかでgolangでnet.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 
} 

答えて

4

https://golang.org/pkg/net/#DialTCP使用net.Dialer

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

変化は、コンテキストに適用deadline又はtimeoutDialer.DialContextを呼び出すことです。

tcpConn, ok := conn.(*net.TCPConn) 
:あなたは、特に代わり net.Connのそのタイプを必要とする場合

タイプ*net.TCPConnに主張します

関連する問題