mirror of
https://github.com/libp2p/go-reuseport.git
synced 2025-10-05 23:06: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)
|
deadline = time.Now().Add(dialer.Timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctxdeadline, ok := ctx.Deadline()
|
||||||
|
if ok && ctxdeadline.Before(deadline) {
|
||||||
|
deadline = ctxdeadline
|
||||||
|
}
|
||||||
|
|
||||||
localSockaddr = sockaddrnet.NetAddrToSockaddr(dialer.LocalAddr)
|
localSockaddr = sockaddrnet.NetAddrToSockaddr(dialer.LocalAddr)
|
||||||
remoteSockaddr = sockaddrnet.NetAddrToSockaddr(netAddr)
|
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 {
|
if err = connect(ctx, fd, remoteSockaddr, deadline); err != nil {
|
||||||
syscall.Close(fd)
|
syscall.Close(fd)
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return nil, err
|
||||||
|
default:
|
||||||
|
}
|
||||||
continue // try again.
|
continue // try again.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -454,6 +454,10 @@ func TestPacketListenDialSamePort(t *testing.T) {
|
|||||||
t.Fatal(err)
|
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 {
|
if _, err := c1.Read(hello2); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user