diff options
author | isaacs <i@izs.me> | 2013-03-29 18:23:39 -0700 |
---|---|---|
committer | isaacs <i@izs.me> | 2013-04-01 10:53:49 -0700 |
commit | 164d5b3465571a88da59cdddc03bb869126548eb (patch) | |
tree | 635162efbc4091335f317a1e7e746613573f282b | |
parent | 440dcae98744954d1528506f2648aff71aadde25 (diff) | |
download | node-164d5b3465571a88da59cdddc03bb869126548eb.tar.gz |
tls: Destroy socket when encrypted side closes
The v0.8 Stream.pipe() method automatically destroyed the destination
stream whenever the src stream closed. However, this caused a lot of
problems, and was removed by popular demand. (Many userland modules
still have a no-op destroy() method just because of this.) It was also
very hazardous because this would be done even if { end: false } was
passed in the pipe options.
In v0.10, we decided that the 'close' event and destroy() method are
application-specific, and pipe() doesn't automatically call destroy().
However, TLS actually depended (silently) on this behavior. So, in this
case, we should just go ahead and destroy the thing when close happens.
Closes #5145
-rw-r--r-- | lib/tls.js | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/tls.js b/lib/tls.js index 538591217..8650041c9 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -1322,6 +1322,12 @@ function pipe(pair, socket) { pair.encrypted.pipe(socket); socket.pipe(pair.encrypted); + pair.encrypted.on('close', function() { + process.nextTick(function() { + socket.destroy(); + }); + }); + pair.fd = socket.fd; var cleartext = pair.cleartext; cleartext.socket = socket; |