Friday 21 April 2017

TCP server, socket hang up on linux date change

I have problem with my TCP server in node.js. Sometimes I have to synchronize ubuntu clock with main server time. Time is changing correctly but there is a problem with my application. After 3-5 date changes server writes some errors:

{ Error: socket hang up
at createHangUpError (_http_client.js:302:15)
at Socket.socketOnEnd (_http_client.js:394:23)
at emitNone (events.js:91:20)
at Socket.emit (events.js:188:7)
at endReadableNT (_stream_readable.js:975:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9) code: 'ECONNRESET' }

I couldn't find any similar problem to mine, where someone will change date. My idea was to restart TCP Server on every date change but it doesn't help.

TCP server code:

var net = require('net');
var TCPCommands = require.main.require('./src/TCP/TCPCommands');
var config = require.main.require('./config');

var server = net.createServer(function (socket) {
  var remoteAddress = socket.remoteAddress + ':' + socket.remotePort;
  socket.on('data', function (data) {
    console.log("Incoming buffer: ");
    console.log(data);
    var sys = require('sys')
    var exec = require('child_process').exec;
    function puts(error, stdout, stderr) {console.log(stdout)}
    exec("date -s " + "'" + moment("SAMPLE DATE").format(localFormat) + "'", puts);
    exec("hwclock --systohc --localtime", puts);
    module.exports.restartTCPServer();

    socket.write("responseBuffer");
  });

  socket.once('close', function() {
    console.log("Connection from " + remoteAddress + " closed");
    socket.end();
  });

  socket.on('error', function(err) {
    console.error("Connection " + remoteAddress);
    console.error(err.message);
    socket.destroy();
  });
});

module.exports = {

  startTCPServer: function() {
    server.listen(config.pttTcpServerPort, function () {
      console.log("TCP Server is running " + config.pttIpAddress + ":" + config.pttTcpServerPort);
    });

  },

  stopTCPServer: function() {
    server.close(function () {
      console.log("Stopping TCP Server");
    });
  },

  restartTCPServer: function() {
    var t = this;
    console.log("Restarting TCP Server");
    t.stopTCPServer();
    t.startTCPServer();
  }

}



via Marcin Gwóźdź

No comments:

Post a Comment