Close TCP Server Correctly When Using Cluster

I have below example code where I deploy child processes by starting the TCP server and shutting down the server after a certain timeout. When I looked at TCP connections after timeout, I can still see one connection is listening.

Also, there are no client connections on this server, and I can see that this event closes the server for every worker.

Strange, the server is also accepting new connections. How do I completely shut down a TCP server in a cluster environment?

I am using node version 0.10.31.

var net = require('net');

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
} else {

    var server = net.createServer(function(sock) {
        console.log('received connection...');
    });

    server.on('listening', function() {
        console.log('listening....');
        setTimeout(function() {
            server.close();
        }, 5000);
    });

    server.on('close', function() {
        console.log('server closed');
    });

    server.listen('2222', '101.30.33.194');
}

      

when running lsof after timeout to check tcp connections:

#lsof -ni -P | grep 2222
node      17228    root   14u  IPv4 440505953      0t0  TCP 101.30.33.194:2222 (LISTEN)

      

+3


source to share





All Articles