2015-05-25 4 views
0

У меня есть несколько клиентов узла TCP и клиент TLS, которые подключаются к внешним серверам:тайна TCP ошибки в узле TLS клиенте

var socket = net.connect(args.connect.ip_port, args.connect.host); 
    socket.setTimeout(this.timeout); 
    socket.on('connect', this.socketOnConnect.bind(this)); 
    socket.on('error', this.socketOnError.bind(this)); 
    socket.on('timeout', this.socketOnTimeout.bind(this)); 

или

this.clearStream = tls.connect(
     args.connect.ip_port, 
     args.connect.url, 
     {}, 
     this.onSecureConnect.bind(this) 
    ); 
    this.clearStream.on('error', this.clearStreamOnError.bind(this)); 
    this.clearStream.on('end', this.clearStreamOnEnd.bind(this)); 

Оба этих сервера периодически испускает необработанную Ошибку :

(err): events.js:72 
(err):   throw er; // Unhandled 'error' event 
(err):    ^
(err): Error: read ECONNRESET 
(err):  at errnoException (net.js:904:11) 
(err):  at TCP.onread (net.js:558:19) 
(err): events.js:72 
(err):   throw er; // Unhandled 'error' event 
(err):    ^
(err): Error: read ECONNRESET 
(err):  at errnoException (net.js:904:11) 
(err):  at TCP.onread (net.js:558:19) 

Я считал, что обработчик ошибок on ('должен иметь дело с этими ошибками, но, очевидно, нет т. Что я пропустил?

Я предполагаю, что я мог бы использовать домен, чтобы обернуть вызовы соединения, но я бы лучше понял, что происходит, прежде чем я это сделаю.

ответ

0

Я не обнаружил, почему ошибки прокрадываются мимо (обработчики ошибок, но я пошел вперед и завернул подозрительные функции в доменах с трассировкой в ​​обработчике ошибок домена, что, по крайней мере, сделало проблему управляемым.

пример кода для всех, кто может быть заинтересован.

var self = this; 
    var domain1 = domain.create(); 

    domain1.on('error', function (err) { 
     log.error(util.format('Domain error in tls client: %s. Exiting.', err.message)); 
     log.error(traceback.replace(/(?:\r\n|\r|\n)/g, '<br />')); 
     self.cleanExit(); 
    }); 

    domain1.run(function() { 
     self.clearStream = tls.connect(
      args.connect.ip_port, 
      args.connect.url, 
      {}, 
      self.onSecureConnect.bind(self) 
     ); 
    }); 
Смежные вопросы