]> Cypherpunks repositories - gostls13.git/commit
net: add Dialer.Cancel to cancel pending dials
authorBrad Fitzpatrick <bradfitz@golang.org>
Mon, 14 Dec 2015 22:21:48 +0000 (22:21 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 15 Dec 2015 21:15:15 +0000 (21:15 +0000)
commit24a83d35453e29087c4d63954bb8c78a982fc207
treedcf0b5f161d145992d5031630a5d0760b0ba95cd
parent479c47e47801fe6af6fd11c203f5150d8b70581e
net: add Dialer.Cancel to cancel pending dials

Dialer.Cancel is a new optional <-chan struct{} channel whose closure
indicates that the dial should be canceled. It is compatible with the
x/net/context and http.Request.Cancel types.

Tested by hand with:

package main

    import (
            "log"
            "net"
            "time"
    )

    func main() {
            log.Printf("start.")
            var d net.Dialer
            cancel := make(chan struct{})
            time.AfterFunc(2*time.Second, func() {
                    log.Printf("timeout firing")
                    close(cancel)
            })
            d.Cancel = cancel
            c, err := d.Dial("tcp", "192.168.0.1:22")
            if err != nil {
                    log.Print(err)
                    return
            }
            log.Fatalf("unexpected connect: %v", c)
    }

Which says:

    2015/12/14 22:24:58 start.
    2015/12/14 22:25:00 timeout firing
    2015/12/14 22:25:00 dial tcp 192.168.0.1:22: operation was canceled

Fixes #11225

Change-Id: I2ef39e3a540e29fe6bfec03ab7a629a6b187fcb3
Reviewed-on: https://go-review.googlesource.com/17821
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
12 files changed:
src/net/dial.go
src/net/dial_test.go
src/net/fd_unix.go
src/net/fd_windows.go
src/net/iprawsock_posix.go
src/net/ipsock_posix.go
src/net/net.go
src/net/sock_posix.go
src/net/tcpsock_plan9.go
src/net/tcpsock_posix.go
src/net/udpsock_posix.go
src/net/unixsock_posix.go