25 lines
554 B
Go
25 lines
554 B
Go
|
package dialer
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// TimeoutDialer is a Dialer that enforces a timeout
|
||
|
type TimeoutDialer struct {
|
||
|
Dialer
|
||
|
ConnectTimeout time.Duration // default: 30 seconds
|
||
|
}
|
||
|
|
||
|
// DialContext implements Dialer.DialContext
|
||
|
func (d TimeoutDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
||
|
timeout := 30 * time.Second
|
||
|
if d.ConnectTimeout != 0 {
|
||
|
timeout = d.ConnectTimeout
|
||
|
}
|
||
|
ctx, cancel := context.WithTimeout(ctx, timeout)
|
||
|
defer cancel()
|
||
|
return d.Dialer.DialContext(ctx, network, address)
|
||
|
}
|