This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Fix for DNS fail in HTTP request

Closes GH-653.
  • Loading branch information...
rjrodger authored and ry committed Feb 10, 2011
1 parent f07041e commit b11d78b386d7ae5e46d606dd1d738a5c6f5b3406
Showing with 47 additions and 0 deletions.
  1. +7 −0 lib/http.js
  2. +40 −0 test/simple/test-http-dns-fail.js
View
@@ -1166,6 +1166,13 @@ Agent.prototype._establishNewConnection = function() {
req.emit('error', err);
req._hadError = true; // hacky
+
+ // clean up so that agent can handle new requests
+ parser.finish();
+ socket.destroy();
+ self._removeSocket(socket);
+ parsers.free(parser);
+ self._cycle();
});
socket.ondata = function(d, start, end) {
@@ -0,0 +1,40 @@
+/*
+ * Repeated requests for a domain that fails to resolve
+ * should trigger the error event after each attempt.
+ */
+
+var common = require('../common');
+var assert = require('assert');
+var http = require('http');
+
+var resDespiteError = false
+var hadError = 0
+
+function httpreq(count) {
+ if ( 1 < count ) return
+
+ var req = http.request({
+ host:'not-a-real-domain-name.nobody-would-register-this-as-a-tld',
+ port: 80,
+ path: '/',
+ method: 'GET'
+ }, function(res) {
+ resDespiteError = true
+ });
+
+ req.on('error', function(e){
+ console.log(e.message);
+ hadError++
+ httpreq(count + 1)
+ })
+
+ req.end()
+}
+
+httpreq(0)
+
+
+process.on('exit', function() {
+ assert.equal(false, resDespiteError);
+ assert.equal(2, hadError);
+});

0 comments on commit b11d78b

Please sign in to comment.