]> Cypherpunks repositories - gostls13.git/commitdiff
net: make windows (*netFD).connect work like its unix version
authorAlex Brainman <alex.brainman@gmail.com>
Wed, 16 Dec 2015 23:03:13 +0000 (10:03 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Wed, 16 Dec 2015 23:51:38 +0000 (23:51 +0000)
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 <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>

src/net/fd_windows.go

index de6a9cbf58cc84e2585d10937bab7b52cdcad266..fd50d772d60d95846f981e09487b7fd281f04438 100644 (file)
@@ -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:
                        }
                }()