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>v5.x
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