]> Cypherpunks repositories - gostls13.git/commitdiff
net: use read deadline in Accept on windows
authorAlexey Borzenkov <snaury@gmail.com>
Tue, 30 Oct 2012 22:58:05 +0000 (09:58 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Tue, 30 Oct 2012 22:58:05 +0000 (09:58 +1100)
Fixes #4296.

R=golang-dev, alex.brainman
CC=golang-dev
https://golang.org/cl/6815044

src/pkg/net/fd_windows.go
src/pkg/net/timeout_test.go

index 4ae78397c33ca6240ba7002ba82510722220dd7f..eecb4a866aaa5fc7a4e484b3fcf2ddd1bc59e600 100644 (file)
@@ -544,7 +544,7 @@ func (fd *netFD) accept(toAddr func(syscall.Sockaddr) Addr) (*netFD, error) {
        var o acceptOp
        o.Init(fd, 'r')
        o.newsock = s
-       _, err = iosrv.ExecIO(&o, 0)
+       _, err = iosrv.ExecIO(&o, fd.rdeadline)
        if err != nil {
                closesocket(s)
                return nil, err
index 672fb7241d7e54ae8605a64d89ca92bd97f24f70..eec371cfb201d1c739c7ae0a572384250c6c4974 100644 (file)
@@ -119,3 +119,30 @@ func TestDeadlineReset(t *testing.T) {
                t.Errorf("unexpected return from Accept; err=%v", err)
        }
 }
+
+func TestTimeoutAccept(t *testing.T) {
+       switch runtime.GOOS {
+       case "plan9":
+               t.Logf("skipping test on %q", runtime.GOOS)
+               return
+       }
+       ln, err := Listen("tcp", "127.0.0.1:0")
+       if err != nil {
+               t.Fatal(err)
+       }
+       defer ln.Close()
+       tl := ln.(*TCPListener)
+       tl.SetDeadline(time.Now().Add(100 * time.Millisecond))
+       errc := make(chan error, 1)
+       go func() {
+               _, err := ln.Accept()
+               errc <- err
+       }()
+       select {
+       case <-time.After(1 * time.Second):
+               // Accept shouldn't block indefinitely
+               t.Errorf("Accept didn't return in an expected time")
+       case <-errc:
+               // Pass.
+       }
+}