mirror of
https://github.com/golang/go.git
synced 2024-09-22 02:48:50 +00:00
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 <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
This commit is contained in:
parent
a766d8e59c
commit
f33f9b2cee
@ -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:
|
||||
}
|
||||
}()
|
||||
|
Loading…
Reference in New Issue
Block a user