commit a656ff02d15ebc8c1cf937d94c1a6ad9bbdcb038 Author: David Fifield david@bamsoftware.com Date: Sat Dec 14 21:53:32 2013 -0800
Check the type of accept errors and close listeners explicitly. --- websocket-client/websocket-client.go | 6 +++++- websocket-server/websocket-server.go | 1 + 2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/websocket-client/websocket-client.go b/websocket-client/websocket-client.go index d1d6dcc..228cb1c 100644 --- a/websocket-client/websocket-client.go +++ b/websocket-client/websocket-client.go @@ -152,10 +152,14 @@ func handleConnection(conn *pt.SocksConn) error { }
func socksAcceptLoop(ln *pt.SocksListener) error { + defer ln.Close() for { socks, err := ln.AcceptSocks() if err != nil { - return err + if e, ok := err.(*net.OpError); ok && !e.Temporary() { + return err + } + continue } go func() { err := handleConnection(socks) diff --git a/websocket-server/websocket-server.go b/websocket-server/websocket-server.go index 84b5e5c..64ae7b4 100644 --- a/websocket-server/websocket-server.go +++ b/websocket-server/websocket-server.go @@ -192,6 +192,7 @@ func startListener(addr *net.TCPAddr) (*net.TCPListener, error) { return nil, err } go func() { + defer ln.Close() var config websocket.Config config.Subprotocols = []string{"base64"} config.MaxMessageSize = maxMessageSize