Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

http,https,net,tls: return this from setTimeout methods #1699

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions doc/api/http.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,8 @@ destroyed automatically if they time out. However, if you assign a
callback to the Server's `'timeout'` event, then you are responsible
for handling socket timeouts.

Returns `server`.

### server.timeout

* {Number} Default = 120000 (2 minutes)
Expand Down Expand Up @@ -318,6 +320,8 @@ assign a handler on the request, the response, or the server's
`'timeout'` events, then it is your responsibility to handle timed out
sockets.

Returns `response`.

### response.statusCode

When using implicit headers (not calling [response.writeHead()][] explicitly),
Expand Down Expand Up @@ -914,6 +918,8 @@ Aborts a request. (New since v0.3.8.)
Once a socket is assigned to this request and is connected
[socket.setTimeout()][] will be called.

Returns `request`.

### request.setNoDelay([noDelay])

Once a socket is assigned to this request and is connected
Expand Down Expand Up @@ -1003,6 +1009,8 @@ received. Only populated at the 'end' event.

Calls `message.connection.setTimeout(msecs, callback)`.

Returns `message`.

### message.method

**Only valid for request obtained from [http.Server][].**
Expand Down
4 changes: 3 additions & 1 deletion doc/api/net.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ For TCP sockets, `options` argument should be an object which specifies:
- `localPort`: Local port to bind to for network connections.

- `family` : Version of IP stack. Defaults to `4`.

- `lookup` : Custom lookup function. Defaults to `dns.lookup`.

For local domain sockets, `options` argument should be an object which
Expand Down Expand Up @@ -451,6 +451,8 @@ If `timeout` is 0, then the existing idle timeout is disabled.
The optional `callback` parameter will be added as a one time listener for the
`'timeout'` event.

Returns `socket`.

### socket.setNoDelay([noDelay])

Disables the Nagle algorithm. By default TCP connections use the Nagle
Expand Down
6 changes: 4 additions & 2 deletions lib/_http_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ ClientRequest.prototype.setTimeout = function(msecs, callback) {
this.socket.setTimeout(0, this.timeoutCb);
this.timeoutCb = emitTimeout;
this.socket.setTimeout(msecs, emitTimeout);
return;
return this;
}

// Set timeoutCb so that it'll get cleaned up on request end
Expand All @@ -548,12 +548,14 @@ ClientRequest.prototype.setTimeout = function(msecs, callback) {
this.socket.once('connect', function() {
sock.setTimeout(msecs, emitTimeout);
});
return;
return this;
}

this.once('socket', function(sock) {
sock.setTimeout(msecs, emitTimeout);
});

return this;
};

ClientRequest.prototype.setNoDelay = function() {
Expand Down
1 change: 1 addition & 0 deletions lib/_http_incoming.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ IncomingMessage.prototype.setTimeout = function(msecs, callback) {
if (callback)
this.on('timeout', callback);
this.socket.setTimeout(msecs);
return this;
};


Expand Down
1 change: 1 addition & 0 deletions lib/_http_outgoing.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ OutgoingMessage.prototype.setTimeout = function(msecs, callback) {
} else {
this.socket.setTimeout(msecs);
}
return this;
};


Expand Down
1 change: 1 addition & 0 deletions lib/_http_server.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ Server.prototype.setTimeout = function(msecs, callback) {
this.timeout = msecs;
if (callback)
this.on('timeout', callback);
return this;
};


Expand Down
1 change: 1 addition & 0 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@ Socket.prototype.setTimeout = function(msecs, callback) {
this.once('timeout', callback);
}
}
return this;
};


Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-http-client-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ server.listen(options.port, options.host, function() {
function destroy() {
req.destroy();
}
req.setTimeout(1, destroy);
var s = req.setTimeout(1, destroy);
assert.ok(s instanceof http.ClientRequest);
req.on('error', destroy);
req.end();
});
18 changes: 12 additions & 6 deletions test/parallel/test-http-set-timeout-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,13 @@ test(function serverTimeout(cb) {
// just do nothing, we should get a timeout event.
});
server.listen(common.PORT);
server.setTimeout(50, function(socket) {
var s = server.setTimeout(50, function(socket) {
caughtTimeout = true;
socket.destroy();
server.close();
cb();
});
assert.ok(s instanceof http.Server);
http.get({ port: common.PORT }).on('error', function() {});
});

Expand All @@ -45,12 +46,13 @@ test(function serverRequestTimeout(cb) {
});
var server = http.createServer(function(req, res) {
// just do nothing, we should get a timeout event.
req.setTimeout(50, function() {
var s = req.setTimeout(50, function() {
caughtTimeout = true;
req.socket.destroy();
server.close();
cb();
});
assert.ok(s instanceof http.IncomingMessage);
});
server.listen(common.PORT);
var req = http.request({ port: common.PORT, method: 'POST' });
Expand All @@ -66,12 +68,13 @@ test(function serverResponseTimeout(cb) {
});
var server = http.createServer(function(req, res) {
// just do nothing, we should get a timeout event.
res.setTimeout(50, function() {
var s = res.setTimeout(50, function() {
caughtTimeout = true;
res.socket.destroy();
server.close();
cb();
});
assert.ok(s instanceof http.OutgoingMessage);
});
server.listen(common.PORT);
http.get({ port: common.PORT }).on('error', function() {});
Expand All @@ -86,9 +89,10 @@ test(function serverRequestNotTimeoutAfterEnd(cb) {
});
var server = http.createServer(function(req, res) {
// just do nothing, we should get a timeout event.
req.setTimeout(50, function(socket) {
var s = req.setTimeout(50, function(socket) {
caughtTimeoutOnRequest = true;
});
assert.ok(s instanceof http.IncomingMessage);
res.on('timeout', function(socket) {
caughtTimeoutOnResponse = true;
});
Expand All @@ -108,9 +112,10 @@ test(function serverResponseTimeoutWithPipeline(cb) {
assert.equal(caughtTimeout, '/2');
});
var server = http.createServer(function(req, res) {
res.setTimeout(50, function() {
var s = res.setTimeout(50, function() {
caughtTimeout += req.url;
});
assert.ok(s instanceof http.OutgoingMessage);
if (req.url === '/1') res.end();
});
server.on('timeout', function(socket) {
Expand Down Expand Up @@ -144,12 +149,13 @@ test(function idleTimeout(cb) {
});
res.end();
});
server.setTimeout(50, function(socket) {
var s = server.setTimeout(50, function(socket) {
caughtTimeoutOnServer = true;
socket.destroy();
server.close();
cb();
});
assert.ok(s instanceof http.Server);
server.listen(common.PORT);
var c = net.connect({ port: common.PORT, allowHalfOpen: true }, function() {
c.write('GET /1 HTTP/1.1\r\nHost: localhost\r\n\r\n');
Expand Down
5 changes: 3 additions & 2 deletions test/parallel/test-http-set-timeout.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
var common = require('../common');
var assert = require('assert');
var http = require('http');
var net = require('net');

var server = http.createServer(function(req, res) {
console.log('got request. setting 1 second timeout');
req.connection.setTimeout(500);

var s = req.connection.setTimeout(500);
assert.ok(s instanceof net.Socket);
req.connection.on('timeout', function() {
req.connection.destroy();
common.debug('TIMEOUT');
Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-https-set-timeout-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,13 @@ test(function serverTimeout(cb) {
// just do nothing, we should get a timeout event.
});
server.listen(common.PORT);
server.setTimeout(50, function(socket) {
var s = server.setTimeout(50, function(socket) {
caughtTimeout = true;
socket.destroy();
server.close();
cb();
});
assert.ok(s instanceof https.Server);
https.get({
port: common.PORT,
rejectUnauthorized: false
Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-https-timeout-server-2.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ var options = {
var server = https.createServer(options, assert.fail);

server.on('secureConnection', function(cleartext) {
cleartext.setTimeout(50, function() {
var s = cleartext.setTimeout(50, function() {
cleartext.destroy();
server.close();
});
assert.ok(s instanceof tls.TLSSocket);
});

server.listen(common.PORT, function() {
Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-net-settimeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ var left = killers.length;
killers.forEach(function(killer) {
var socket = net.createConnection(common.PORT, 'localhost');

socket.setTimeout(T, function() {
var s = socket.setTimeout(T, function() {
socket.destroy();
if (--left === 0) server.close();
assert.ok(killer !== 0);
clearTimeout(timeout);
});
assert.ok(s instanceof net.Socket);

socket.setTimeout(killer);

Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-tls-request-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ var options = {
};

var server = tls.Server(options, function(socket) {
socket.setTimeout(100);
var s = socket.setTimeout(100);
assert.ok(s instanceof tls.TLSSocket);

socket.on('timeout', function(err) {
hadTimeout = true;
Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-tls-timeout-server-2.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ var options = {
};

var server = tls.createServer(options, function(cleartext) {
cleartext.setTimeout(50, function() {
var s = cleartext.setTimeout(50, function() {
cleartext.destroy();
server.close();
});
assert.ok(s instanceof tls.TLSSocket);
});

server.listen(common.PORT, function() {
Expand Down
3 changes: 2 additions & 1 deletion test/parallel/test-tls-wrap-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ var server = tls.createServer(options, function(c) {

server.listen(common.PORT, function() {
var socket = net.connect(common.PORT, function() {
socket.setTimeout(common.platformTimeout(240), function() {
var s = socket.setTimeout(common.platformTimeout(240), function() {
throw new Error('timeout');
});
assert.ok(s instanceof net.Socket);

var tsocket = tls.connect({
socket: socket,
Expand Down