Skip to content

Commit

Permalink
net: make windows (*netFD).connect work like its unix version
Browse files Browse the repository at this point in the history
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 <[email protected]>
Run-TryBot: Brad Fitzpatrick <[email protected]>
Run-TryBot: Alex Brainman <[email protected]>
  • Loading branch information
alexbrainman committed Dec 16, 2015
1 parent a766d8e commit f33f9b2
Showing 1 changed file with 3 additions and 9 deletions.
12 changes: 3 additions & 9 deletions src/net/fd_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
}
}()
Expand Down

0 comments on commit f33f9b2

Please sign in to comment.