diff --git a/source/vibe/core/net.d b/source/vibe/core/net.d index 7e70a05..aa6e73f 100644 --- a/source/vibe/core/net.d +++ b/source/vibe/core/net.d @@ -215,7 +215,16 @@ TCPConnection connectTCP(NetworkAddress addr, NetworkAddress bind_address = anyA enforce(!cancelled, "Failed to connect to " ~ addr.toString() ~ ": timeout"); - enforce(status == ConnectStatus.connected, "Failed to connect to "~addr.toString()~": "~status.to!string); + + if (status != ConnectStatus.connected) { + if (sock != SocketFD.invalid) { + bool refsLeft = eventDriver.sockets.releaseRef(sock); + assert(!refsLeft); + } + + enforce(false, "Failed to connect to "~addr.toString()~": "~status.to!string); + assert(false); + } return TCPConnection(sock, uaddr); } (); diff --git a/tests/issue-115-connect-fail-leak.d b/tests/issue-115-connect-fail-leak.d new file mode 100644 index 0000000..5a6577c --- /dev/null +++ b/tests/issue-115-connect-fail-leak.d @@ -0,0 +1,22 @@ +/+ dub.sdl: + name "test" + dependency "vibe-core" path=".." ++/ +module test; + +import vibe.core.core; +import vibe.core.log; +import vibe.core.net; + +void main() +{ + foreach (_; 0 .. 20) { + TCPConnection conn; + try { + conn = connectTCP("127.0.0.1", 16565); + logError("Connection: %s", conn); + conn.close(); + assert(false, "Didn't expect TCP connection on port 16565 to succeed"); + } catch (Exception) { } + } +} \ No newline at end of file