diff --git a/lib/net.js b/lib/net.js index 809a6f0f14582e..0f80b4189718ba 100644 --- a/lib/net.js +++ b/lib/net.js @@ -1138,7 +1138,8 @@ function afterConnect(status, handle, req, readable, writable) { if (status === 0) { self.readable = readable; - self.writable = writable; + if (!self._writableState.ended) + self.writable = writable; self._unrefTimer(); self.emit('connect'); diff --git a/test/parallel/test-net-socket-end-before-connect.js b/test/parallel/test-net-socket-end-before-connect.js new file mode 100644 index 00000000000000..d40c90620e4153 --- /dev/null +++ b/test/parallel/test-net-socket-end-before-connect.js @@ -0,0 +1,13 @@ +'use strict'; + +const common = require('../common'); + +const net = require('net'); + +const server = net.createServer(); + +server.listen(common.mustCall(() => { + const socket = net.createConnection(server.address().port); + socket.on('close', common.mustCall(() => server.close())); + socket.end(); +}));