Skip to content
Snippets Groups Projects
Commit f135d120 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Fix #228 do not crash if a network interface is not available

parent 4beae427
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ var http = require('http'); ...@@ -2,6 +2,7 @@ var http = require('http');
var express = require('express'); var express = require('express');
var async = require('async'); var async = require('async');
var log4js = require('log4js'); var log4js = require('log4js');
var co = require('co');
var Q = require('q'); var Q = require('q');
var cors = require('express-cors'); var cors = require('express-cors');
var es = require('event-stream'); var es = require('event-stream');
...@@ -122,18 +123,24 @@ module.exports = function(server, interfaces, httpLogs) { ...@@ -122,18 +123,24 @@ module.exports = function(server, interfaces, httpLogs) {
var httpServers = []; var httpServers = [];
return interfaces.reduce(function(promise, netInterface) { return co(function *() {
return promise.then(function() { for (let i = 0, len = interfaces.length; i < len; i++) {
return listenInterface(app, netInterface.ip, netInterface.port) let netInterface = interfaces[i];
.then(function(httpServer){ try {
let httpServer = yield listenInterface(app, netInterface.ip, netInterface.port);
listenWebSocket(server, httpServer); listenWebSocket(server, httpServer);
httpServers.push(httpServer); httpServers.push(httpServer);
logger.info('uCoin server listening on ' + netInterface.ip + ' port ' + netInterface.port); logger.info('uCoin server listening on ' + netInterface.ip + ' port ' + netInterface.port);
}); } catch (err) {
}); logger.error('uCoin server cannot listen on ' + netInterface.ip + ' port ' + netInterface.port);
}, Q.resolve()) }
}
.then(function(){ if (httpServers.length == 0){
throw 'uCoin does not have any interface to listen to.';
}
// Return API
return { return {
closeConnections: function () { closeConnections: function () {
...@@ -162,9 +169,9 @@ function listenInterface(app, netInterface, port) { ...@@ -162,9 +169,9 @@ function listenInterface(app, netInterface, port) {
"use strict"; "use strict";
return Q.Promise(function(resolve, reject){ return Q.Promise(function(resolve, reject){
var httpServer = http.createServer(app); var httpServer = http.createServer(app);
httpServer.listen(port, netInterface, function(err){ httpServer.on('error', reject);
err ? reject(err) : resolve(httpServer); httpServer.on('listening', resolve.bind(this, httpServer));
}); httpServer.listen(port, netInterface);
}); });
} }
...@@ -174,6 +181,7 @@ function listenWebSocket(server, httpServer) { ...@@ -174,6 +181,7 @@ function listenWebSocket(server, httpServer) {
var currentBlock = {}; var currentBlock = {};
var blockSocket = io var blockSocket = io
.of('/websocket/block') .of('/websocket/block')
.on('error', (err) => logger.error(err))
.on('connection', function (socket) { .on('connection', function (socket) {
socket.emit('block', currentBlock); socket.emit('block', currentBlock);
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment