| // just like test/gc/http-client-timeout.js, |
| // but using a net server/client instead |
| |
| function serverHandler(sock) { |
| sock.setTimeout(120000); |
| setTimeout(function () { |
| sock.end('hello\n'); |
| }, 100); |
| } |
| |
| var net = require('net'), |
| weak = require('weak'), |
| done = 0, |
| count = 0, |
| countGC = 0, |
| todo = 500, |
| common = require('../common.js'), |
| assert = require('assert'), |
| PORT = common.PORT; |
| |
| console.log('We should do '+ todo +' requests'); |
| |
| var server = net.createServer(serverHandler); |
| server.listen(PORT, getall); |
| |
| function getall() { |
| for (var i = 0; i < todo; i++) { |
| (function(){ |
| var req = net.connect(PORT, '127.0.0.1'); |
| req.setTimeout(10, function() { |
| console.log('timeout (expected)') |
| req.destroy(); |
| done++; |
| statusLater(); |
| }); |
| |
| count++; |
| weak(req, afterGC); |
| })(); |
| } |
| } |
| |
| function afterGC(){ |
| countGC ++; |
| } |
| |
| var timer; |
| function statusLater() { |
| gc(); |
| if (timer) clearTimeout(timer); |
| timer = setTimeout(status, 1); |
| } |
| |
| function status() { |
| gc(); |
| console.log('Done: %d/%d', done, todo); |
| console.log('Collected: %d/%d', countGC, count); |
| if (done === todo) { |
| /* Give libuv some time to make close callbacks. */ |
| setTimeout(function() { |
| gc(); |
| console.log('All should be collected now.'); |
| console.log('Collected: %d/%d', countGC, count); |
| assert(count === countGC); |
| process.exit(0); |
| }, 200); |
| } |
| } |
| |