From f33f9b2ceeaa96df617871dee77fd52e94e4fc3e Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Thu, 17 Dec 2015 10:03:13 +1100 Subject: [PATCH] net: make windows (*netFD).connect work like its unix version CL 17821 used syscall.CancelIoEx to cancel outstanding connect call, but did not check for syscall.CancelIoEx return value. Also I am worried about introducing race here. We should use proper tools available for us instead. For example, we could use fd.setWriteDeadline just like unix version does. Do that. Change-Id: Idb9a03c8c249278ce3e2a4c49cc32445d4c7b065 Reviewed-on: https://go-review.googlesource.com/17920 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick Run-TryBot: Alex Brainman --- src/net/fd_windows.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/net/fd_windows.go b/src/net/fd_windows.go index de6a9cbf58..fd50d772d6 100644 --- a/src/net/fd_windows.go +++ b/src/net/fd_windows.go @@ -357,15 +357,9 @@ func (fd *netFD) connect(la, ra syscall.Sockaddr, deadline time.Time, cancel <-c go func() { select { case <-cancel: - // TODO(bradfitz,brainman): cancel the dial operation - // somehow. Brad doesn't know Windows but is going to - // try this: - if canCancelIO { - syscall.CancelIoEx(o.fd.sysfd, &o.o) - } else { - wsrv.req <- ioSrvReq{o, nil} - <-o.errc - } + // Force the runtime's poller to immediately give + // up waiting for writability. + fd.setWriteDeadline(aLongTimeAgo) case <-done: } }() -- 2.48.1