mirror of
https://github.com/libp2p/go-reuseport.git
synced 2025-10-05 14:56:51 +08:00
Respect context deadlines
This commit is contained in:
10
impl_unix.go
10
impl_unix.go
@@ -90,6 +90,11 @@ func dial(ctx context.Context, dialer net.Dialer, netw, addr string) (c net.Conn
|
||||
deadline = time.Now().Add(dialer.Timeout)
|
||||
}
|
||||
|
||||
ctxdeadline, ok := ctx.Deadline()
|
||||
if ok && ctxdeadline.Before(deadline) {
|
||||
deadline = ctxdeadline
|
||||
}
|
||||
|
||||
localSockaddr = sockaddrnet.NetAddrToSockaddr(dialer.LocalAddr)
|
||||
remoteSockaddr = sockaddrnet.NetAddrToSockaddr(netAddr)
|
||||
|
||||
@@ -138,6 +143,11 @@ func dial(ctx context.Context, dialer net.Dialer, netw, addr string) (c net.Conn
|
||||
|
||||
if err = connect(ctx, fd, remoteSockaddr, deadline); err != nil {
|
||||
syscall.Close(fd)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil, err
|
||||
default:
|
||||
}
|
||||
continue // try again.
|
||||
}
|
||||
|
||||
|
@@ -454,6 +454,10 @@ func TestPacketListenDialSamePort(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := c1.SetReadDeadline(time.Now().Add(time.Second * 2)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if _, err := c1.Read(hello2); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user