I have a simple TCP server as follows:
var net = require('net');
var PORT = 6346;
var server = net.createServer(function(socket) {
socket.on('connect', function() {
console.log('Client connected: ' + socket.remoteAddress);
socket.write('Welcome to the server!\r\n');
});
socket.on('end', function() {
console.log('Client disconnected: ' + socket.remoteAddress);
});
socket.on('error', function() {
console.log('Client error: ' + socket.remoteAddress);
});
socket.on('timeout', function() {
console.log('Client timed out:' + socket.remoteAddress);
});
}).listen(PORT);
When I connect to the server I see the expected Client connected: 127.0.0.1 but when I disconnect I see Client disconnected: undefined. Why is socket.remoteAddress undefined and how can I log the IP of the client upon disconnect?
The problem is that after the socket is disconnected, certain properties (such as
remoteAddress) are no longer available!You can get around this by wrapping socket with your own object, or by keeping track of that remote address somewhere else upon connect. (Woot for closures.)