Respect context deadlines

This commit is contained in:
Jeromy
2016-08-17 11:35:25 -07:00
committed by Jakub Sztandera
parent 715d488a8f
commit 464e01657e
2 changed files with 14 additions and 0 deletions

View File

@@ -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.
}

View File

@@ -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)
}