В общем, нашёл как делают по-нормальному. Есть такая штука как stream.
Т.е. при 'connect' добавляем новый сокет в нашу таблицу подключений:
streams.push(sock); //Добавляем в массив потоков
При 'close' удаляем из таблицы тот, который отвалился
sock.on('close', function(data)//событие "клиент отключился"
{
var i=0;
var arr;
streams.forEach(function(stream)
{
if (stream.remoteAddress==sock.remoteAddress && stream.remotePort==sock.remotePort)
{
if (i!=0)
{
streams.splice(i);
}
else
{
streams.shift();
}
}
i++;
});
Ну и далее нам в любом месте программы уже доступны все активные потоки. И можно отправлять данные вне зависимости от событий сокета.
Например, отправить в первый поток:
stream.write(streams[1].remoteAddress + ':' + data, 'utf8');