I am on Mac OS 10.7.5. I have added 127.0.0.1 to my DNS Server List. When I create a dns server using node-dns and then create an https server on a domain resolved by the dns server, I get the following error:
Error: listen EADDRNOTAVAIL
at errnoException (net.js:900:11)
at Server._listen2 (net.js:1019:19)
at listen (net.js:1060:10)
at net.js:1134:9
at asyncCallback (dns.js:68:16)
at Object.onanswer as oncomplete
My code is as follows:
var fs = require('fs');
var path = require('path');
var dns = require('native-dns');
var https = require('https');
var express = require('express');
String.prototype.endsWith = function(s) {
return this.length >= s.length && this.substr(this.length - s.length) == s;
};
var startDns = function(sample_port, callback) {
var server = dns.createServer();
server.on('request', function(request, response) {
var found = false;
for (var q = 0; q < request.question.length; q++)
{
var name = request.question[q].name;
console.log('dns request: ' + name);
if (name.endsWith("sample.com"))
{
response.answer.push(dns.A({
name:name,
address:'127.0.0.2',
port:sample_port,
ttl:60
}));
found = true;
}
}
if (found)
{
console.log('DNS response: ' + JSON.stringify(response.answer));
response.send();
}
});
server.on('error', function(err, buff, req, res) {
console.log(JSON.stringify(err));
});
server.on('listening', function() {
console.log("DNS server started on port 53");
if (callback)
{
callback();
}
});
server.serve(53);
return server;
};
var startHttps = function(serverPort) {
// Set up secure server
var options = {
key:fs.readFileSync(path.join(__dirname, 'certificates/sample.com-key.pem')),
cert:fs.readFileSync(path.join(__dirname, 'certificates/sample.com-cert.pem'))
};
var app = express();
var server = https.createServer(options, app);
app.get('*', function(req, res, next) {
res.send('Hello from ' + req.headers.host);
});
server.listen(serverPort, 'test.sample.com');
console.log('https server started on port ' + serverPort);
return server;
};
var server_port = parseInt(process.argv[2] || 8082);
var httpsServer;
var dnsServer = startDns(server_port, function() {
httpsServer = startHttps(server_port)
});
process.on('SIGINT', function() {
console.log("shutting down");
if (httpsServer)
{
httpsServer.close();
}
if (dnsServer)
{
dnsServer.close();
}
});
The full output looks like this:
DNS server started on port 53
https server started on port 8082
dns request: test.sample.com
DNS response: [{"type":1,"class":1,"name":"test.sample.com","address":"127.0.0.2","port":8082,"ttl":60}]
dns request: test.sample.com
DNS response: [{"type":1,"class":1,"name":"test.sample.com","address":"127.0.0.2","port":8082,"ttl":60}]
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRNOTAVAIL
at errnoException (net.js:900:11)
at Server._listen2 (net.js:1019:19)
at listen (net.js:1060:10)
at net.js:1134:9
at asyncCallback (dns.js:68:16)
at Object.onanswer [as oncomplete] (dns.js:121:9)
I am on Mac OS 10.7.5. I have added 127.0.0.1 to my DNS Server List. When I create a dns server using node-dns and then create an https server on a domain resolved by the dns server, I get the following error: Error: listen EADDRNOTAVAIL at errnoException (net.js:900:11) at Server._listen2 (net.js:1019:19) at listen (net.js:1060:10) at net.js:1134:9 at asyncCallback (dns.js:68:16) at Object.onanswer as oncomplete
My code is as follows: var fs = require('fs'); var path = require('path'); var dns = require('native-dns'); var https = require('https'); var express = require('express');
The full output looks like this: DNS server started on port 53 https server started on port 8082 dns request: test.sample.com DNS response: [{"type":1,"class":1,"name":"test.sample.com","address":"127.0.0.2","port":8082,"ttl":60}] dns request: test.sample.com DNS response: [{"type":1,"class":1,"name":"test.sample.com","address":"127.0.0.2","port":8082,"ttl":60}]