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>
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:
}
}()