Commit 19aa4209 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

syscall: fix nacl listener to not accept connections once closed

Change-Id: I3ba6e97089ef6e69ba31dfb632df465859906a74
Reviewed-on: https://go-review.googlesource.com/15940
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarMinux Ma <minux@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 42c7929c
......@@ -208,7 +208,6 @@ func TestListenerClose(t *testing.T) {
case "unix", "unixpacket":
defer os.Remove(ln.Addr().String())
}
defer ln.Close()
if err := ln.Close(); err != nil {
if perr := parseCloseError(err); perr != nil {
......@@ -221,6 +220,14 @@ func TestListenerClose(t *testing.T) {
c.Close()
t.Fatal("should fail")
}
if network == "tcp" {
cc, err := Dial("tcp", ln.Addr().String())
if err == nil {
t.Error("Dial to closed TCP listener succeeeded.")
cc.Close()
}
}
}
}
......
......@@ -577,7 +577,7 @@ func (f *netFile) connect(sa Sockaddr) error {
return EISCONN
}
l, ok := net.listener[netAddr{f.proto, f.sotype, sa.key()}]
if !ok {
if !ok || l.listenerClosed() {
net.Unlock()
return ECONNREFUSED
}
......@@ -676,6 +676,12 @@ func (f *netFile) sendto(p []byte, flags int, to Sockaddr) error {
return nil
}
func (f *netFile) listenerClosed() bool {
f.listener.Lock()
defer f.listener.Unlock()
return f.listener.closed
}
func (f *netFile) close() error {
if f.listener != nil {
f.listener.close()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment