It can happen that the HTTP connection is closed before the server has received all the requests, thus the server close condition is never reached. To solve this, close the server when the socket is fully closed. PR-URL: https://github.com/nodejs/node/pull/4041 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Minwoo Jung <jmwsoft@gmail.com> Reviewed-By: Evan Lucas <evanlucas@me.com>
41 lines
891 B
JavaScript
41 lines
891 B
JavaScript
'use strict';
|
|
var common = require('../common');
|
|
var assert = require('assert');
|
|
|
|
// no warnings should happen!
|
|
var trace = console.trace;
|
|
console.trace = function() {
|
|
trace.apply(console, arguments);
|
|
throw new Error('no tracing should happen here');
|
|
};
|
|
|
|
var http = require('http');
|
|
var net = require('net');
|
|
|
|
var numRequests = 20;
|
|
var first = false;
|
|
|
|
var server = http.createServer(function(req, res) {
|
|
if (!first) {
|
|
first = true;
|
|
req.socket.on('close', function() {
|
|
server.close();
|
|
});
|
|
}
|
|
|
|
res.end('ok');
|
|
// Oh no! The connection died!
|
|
req.socket.destroy();
|
|
});
|
|
|
|
server.listen(common.PORT);
|
|
|
|
var client = net.connect({ port: common.PORT, allowHalfOpen: true });
|
|
for (var i = 0; i < numRequests; i++) {
|
|
client.write('GET / HTTP/1.1\r\n' +
|
|
'Host: some.host.name\r\n' +
|
|
'\r\n\r\n');
|
|
}
|
|
client.end();
|
|
client.pipe(process.stdout);
|