mirror of https://github.com/lukechilds/node.git
Browse Source
Always check that socket still has the parser. It may be destroyed interim, and we may end up with an uncaught exception. Fix: https://github.com/nodejs/node/issues/3508 PR-URL: https://github.com/nodejs/node-private/pull/5 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com>process-exit-stdio-flushing
Fedor Indutny
9 years ago
committed by
Rod Vagg
2 changed files with 60 additions and 2 deletions
@ -0,0 +1,57 @@ |
|||
'use strict'; |
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const http = require('http'); |
|||
const net = require('net'); |
|||
|
|||
var once = false; |
|||
var first = null; |
|||
var second = null; |
|||
|
|||
const chunk = new Buffer(1024); |
|||
chunk.fill('X'); |
|||
|
|||
var size = 0; |
|||
|
|||
var more; |
|||
var done; |
|||
|
|||
var server = http.createServer(function(req, res) { |
|||
if (!once) |
|||
server.close(); |
|||
once = true; |
|||
|
|||
if (first === null) { |
|||
first = res; |
|||
return; |
|||
} |
|||
if (second === null) { |
|||
second = res; |
|||
res.write(chunk); |
|||
} else { |
|||
res.end(chunk); |
|||
} |
|||
size += res.outputSize; |
|||
if (size <= req.socket._writableState.highWaterMark) { |
|||
more(); |
|||
return; |
|||
} |
|||
done(); |
|||
}).on('upgrade', function(req, socket) { |
|||
second.end(chunk, function() { |
|||
socket.end(); |
|||
}); |
|||
first.end('hello'); |
|||
}).listen(common.PORT, function() { |
|||
var s = net.connect(common.PORT); |
|||
more = function() { |
|||
s.write('GET / HTTP/1.1\r\n\r\n'); |
|||
}; |
|||
done = function() { |
|||
s.write('GET / HTTP/1.1\r\n\r\n' + |
|||
'GET / HTTP/1.1\r\nConnection: upgrade\r\nUpgrade: ws\r\n\r\naaa'); |
|||
}; |
|||
more(); |
|||
more(); |
|||
s.resume(); |
|||
}); |
Loading…
Reference in new issue