mirror of https://github.com/lukechilds/node.git
Ryan Dahl
14 years ago
5 changed files with 137 additions and 3 deletions
@ -0,0 +1,59 @@ |
|||||
|
var common = require('../common'); |
||||
|
var assert = require('assert'); |
||||
|
var http = require('http'); |
||||
|
|
||||
|
var clientAborts = 0; |
||||
|
|
||||
|
var server = http.Server(function(req, res) { |
||||
|
console.log("Got connection"); |
||||
|
res.writeHead(200); |
||||
|
res.write("Working on it..."); |
||||
|
|
||||
|
// I would expect an error event from req or res that the client aborted
|
||||
|
// before completing the HTTP request / response cycle, or maybe a new
|
||||
|
// event like "aborted" or something.
|
||||
|
req.on("aborted", function () { |
||||
|
clientAborts++; |
||||
|
console.log("Got abort " + clientAborts); |
||||
|
if (clientAborts === N) { |
||||
|
console.log("All aborts detected, you win."); |
||||
|
server.close(); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
// since there is already clientError, maybe that would be appropriate,
|
||||
|
// since "error" is magical
|
||||
|
req.on("clientError", function () { |
||||
|
console.log("Got clientError"); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
var responses = 0; |
||||
|
var N = http.Agent.defaultMaxSockets - 1; |
||||
|
var requests = []; |
||||
|
|
||||
|
server.listen(common.PORT, function() { |
||||
|
console.log("Server listening."); |
||||
|
|
||||
|
for (var i = 0; i < N; i++) { |
||||
|
console.log("Making client " + i); |
||||
|
var options = { port: common.PORT, path: '/?id=' + i }; |
||||
|
var req = http.get(options, function(res) { |
||||
|
console.log("Client response code " + res.statusCode); |
||||
|
|
||||
|
if (++responses == N) { |
||||
|
console.log("All clients connected, destroying."); |
||||
|
requests.forEach(function (outReq) { |
||||
|
console.log("abort"); |
||||
|
outReq.abort(); |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
requests.push(req); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
process.on('exit', function() { |
||||
|
assert.equal(N, clientAborts); |
||||
|
}); |
Loading…
Reference in new issue