Added socketTimeout option, which ensure that OS-level timeout is handled for all sockets handled by the library

fork
Tony Mobily 10 years ago
parent 7bea9b5f1d
commit 15f03a4cb4

@ -56,6 +56,7 @@ function Connection(config) {
this._config = {
socket: config.socket,
socketTimeout: config.socketTimeout,
host: config.host || 'localhost',
port: config.port || 143,
tls: config.tls,
@ -98,7 +99,6 @@ Connection.prototype.connect = function() {
socket = config.socket || new Socket();
socket.setKeepAlive(true);
socket.setTimeout(0);
this._sock = undefined;
this._tagcount = 0;
this._tmrConn = undefined;
@ -150,6 +150,21 @@ Connection.prototype.connect = function() {
};
this._sock.on('error', this._onError);
this._onSocketTimeout = function(){
clearTimeout(self._tmrConn);
clearTimeout(self._tmrAuth);
clearTimeout(self._tmrKeepalive);
self.state = 'disconnected';
self.debug && self.debug('[connection] Socket timeout');
var err = new Error('Socket timed out while talking to server');
err.source = 'timeout';
self.emit('error', err);
socket.destroy();
};
this._sock.on('timeout', this._onSocketTimeout);
socket.setTimeout(config.socketTimeout);
socket.once('close', function(had_err) {
clearTimeout(self._tmrConn);
clearTimeout(self._tmrAuth);
@ -1675,6 +1690,9 @@ Connection.prototype._starttls = function() {
});
self._sock.on('error', self._onError);
self._sock.on('timeout', this._onSocketTimeout);
self._sock.setTimeout(config.socketTimeout);
self._parser.setStream(self._sock);
});
};

Loading…
Cancel
Save