http,net,tls: return this from setTimeout methods
authorEvan Lucas <evanlucas@me.com>
Thu, 14 May 2015 02:25:57 +0000 (21:25 -0500)
committerRoman Reiss <me@silverwind.io>
Sat, 16 May 2015 05:17:41 +0000 (07:17 +0200)
Modifies the setTimeout methods for the following prototypes:

- http.ClientRequest
- http.IncomingMessage
- http.OutgoingMessage
- http.Server
- https.Server
- net.Socket
- tls.TLSSocket

Previously, the above functions returned undefined. They now return
`this`. This is useful for chaining function calls.

PR-URL: https://github.com/nodejs/io.js/pull/1699
Reviewed-By: Roman Reiss <me@silverwind.io>
16 files changed:
doc/api/http.markdown
doc/api/net.markdown
lib/_http_client.js
lib/_http_incoming.js
lib/_http_outgoing.js
lib/_http_server.js
lib/net.js
test/parallel/test-http-client-timeout.js
test/parallel/test-http-set-timeout-server.js
test/parallel/test-http-set-timeout.js
test/parallel/test-https-set-timeout-server.js
test/parallel/test-https-timeout-server-2.js
test/parallel/test-net-settimeout.js
test/parallel/test-tls-request-timeout.js
test/parallel/test-tls-timeout-server-2.js
test/parallel/test-tls-wrap-timeout.js

index 245b5d7..91f5a0a 100644 (file)
@@ -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)
@@ -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),
@@ -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
@@ -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][].**
index 0c61d4c..3fc6cf8 100644 (file)
@@ -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
@@ -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
index 200a08e..f8239fe 100644 (file)
@@ -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
@@ -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() {
index aea665e..b371c7d 100644 (file)
@@ -68,6 +68,7 @@ IncomingMessage.prototype.setTimeout = function(msecs, callback) {
   if (callback)
     this.on('timeout', callback);
   this.socket.setTimeout(msecs);
+  return this;
 };
 
 
index bfebef2..9726ca9 100644 (file)
@@ -88,6 +88,7 @@ OutgoingMessage.prototype.setTimeout = function(msecs, callback) {
   } else {
     this.socket.setTimeout(msecs);
   }
+  return this;
 };
 
 
index ae2bba0..2d503f8 100644 (file)
@@ -243,6 +243,7 @@ Server.prototype.setTimeout = function(msecs, callback) {
   this.timeout = msecs;
   if (callback)
     this.on('timeout', callback);
+  return this;
 };
 
 
index 7689033..f8ebb2c 100644 (file)
@@ -310,6 +310,7 @@ Socket.prototype.setTimeout = function(msecs, callback) {
       this.once('timeout', callback);
     }
   }
+  return this;
 };
 
 
index 8ea36de..a9b093e 100644 (file)
@@ -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();
 });
index ccad6f1..caefc03 100644 (file)
@@ -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() {});
 });
 
@@ -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' });
@@ -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() {});
@@ -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;
     });
@@ -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) {
@@ -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');
index 1c547f0..5bb34ad 100644 (file)
@@ -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');
index 5ae8bae..a78725e 100644 (file)
@@ -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
index d802ad4..0a074da 100644 (file)
@@ -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() {
index 28943a1..a11c4a1 100644 (file)
@@ -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);
 
index 10a1469..a5dcdd3 100644 (file)
@@ -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;
index a16ce33..dc3d52d 100644 (file)
@@ -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() {
index 3013f68..75952da 100644 (file)
@@ -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,