From: Chris Farmiloe Date: Tue, 11 Oct 2011 16:53:16 +0000 (-0400) Subject: net: fix socket leak in case of Dial failure X-Git-Tag: weekly.2011-10-18~130 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4b749567b8ceb441b27ba375c85d52f6297faea3;p=gostls13.git net: fix socket leak in case of Dial failure Socket descriptors are not closed when fd.connect() fails during generic socket creation. After a connection failure [ECONNREFUSED] descriptors are left in SYN_SENT state indefinitely (unless they get an explicit RST). Repeated failed connections will eventually cause your program to hit the user/system max-open-files limit. Fixes #2349. R=golang-dev, mikioh.mikioh CC=golang-dev https://golang.org/cl/5229047 --- diff --git a/src/pkg/net/sock.go b/src/pkg/net/sock.go index 366e050ff3..2359014ad6 100644 --- a/src/pkg/net/sock.go +++ b/src/pkg/net/sock.go @@ -52,6 +52,7 @@ func socket(net string, f, p, t int, la, ra syscall.Sockaddr, toAddr func(syscal if ra != nil { if err = fd.connect(ra); err != nil { + closesocket(s) fd.Close() return nil, err }