4

I started using [cloud9][1] and trying to host my nodejs app. When I try to run my app it is throwing me following error:

Important: use process.env.PORT as the port and process.env.IP as the host in your

Important: use process.env.PORT as the port and process.env.IP as the host in your scripts!                                                                            

debugger listening on port 15454                                                                                                                                       
8080                                                                                                                                                                   
0.0.0.0                                                                                                                                                                

events.js:72                                                                                                                                                           
        throw er; // Unhandled 'error' event                                                                                                                           
              ^                                                                                                                         
Error: listen EADDRINUSE                                                                                                                
    at errnoException (net.js:905:11)                                                                                                   
    at Server._listen2 (net.js:1043:14)                                                                                                 
    at listen (net.js:1065:10)                                                                                                          
    at Server.listen (net.js:1147:9)                                                                                                    
    at exports.lookup.callback (dns.js:72:18)                                                                                                                          
    at process._tickCallback (node.js:442:13)                                                                                                                          
    at Module.runMain [as _onTimeout] (module.js:499:11)                                                                                                               
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)

My app.js:

var app = require('express')();
//var app = express();
//var http = require('http');
var server = require('http').Server(app);
var io = require('socket.io')(server);
app.set('port', process.env.PORT || 3000);
var port = app.get('port');
console.log(port);
server.listen(port, process.env.IP);
// routing
app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});
// usernames which are currently connected to the chat
var usernames = {};
// rooms which are currently available in chat
var rooms = [];
io.sockets.on('connection', function (socket) {
    socket.on('adduser', function (username, room) {
        socket.username = username;
        socket.room = room;
        usernames[username] = username;
        socket.join(room);
        socket.emit('updatechat', 'SERVER', 'You are connected. Start chatting');
        socket.broadcast.to(room).emit('updatechat', 'SERVER', username + ' has connected to this room');
    });
    socket.on('createroom', function () {
        var new_room = (""+Math.random()).substring(2,7);
        rooms.push(new_room);
        socket.emit('updatechat', 'SERVER', 'Your room is ready, invite someone using this ID:' + new_room);
        socket.emit('roomcreated', new_room);
    });
    // when the client emits 'sendchat', this listens and executes
    socket.on('sendchat', function (data) {
        // we tell the client to execute 'updatechat' with 2 parameters
        io.sockets. in (socket.room).emit('updatechat', socket.username, data);
    });

    // when the user disconnects.. perform this
    socket.on('disconnect', function () {
        // remove the username from global usernames list
        delete usernames[socket.username];
        // update list of users in chat, client-side
        io.sockets.emit('updateusers', usernames);
        // echo globally that this client has left
        if(socket.username !== undefined){
            socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected');
            socket.leave(socket.room);
        }
    });
});

I tried looking for any process already running at 8080, this is the output

user@chat_room:~/workspace (master) $ ps ax | grep node
14154 pts/1    S+     0:00 grep --color=auto node

If I try using other port then I am not getting socket file, it throws me 404 error:

<script src="/socket.io/socket.io.js"></script>

This works fine in local.

EDIT Open ports:

user@chat_room:~/workspace (master) $ netstat --listen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:mysql                 *:*                     LISTEN     
tcp        0      0 localhost:17123         *:*                     LISTEN     
tcp6       0      0 [::]:http-alt           [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     353035357 /tmp/tmux-1000/cloud91.8
unix  2      [ ACC ]     STREAM     LISTENING     351539622 /home/ubuntu/lib/mysql/socket/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     352204732 /home/ubuntu/.c9/1312164/collab.sock


user@chat_room:~/workspace (master) $ netstat -vatn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:17123         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:37186         127.0.0.1:15455         TIME_WAIT  
tcp        0      0 127.0.0.1:15454         127.0.0.1:59371         TIME_WAIT  
tcp6       0      0 :::8080                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0    400 172.17.0.248:22         10.240.179.70:43154     ESTABLISHED


user@chat_room:~/workspace (master) $ netstat -vat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:mysql                 *:*                     LISTEN     
tcp        0      0 localhost:17123         *:*                     LISTEN     
tcp        0      0 localhost:37186         localhost:15455         TIME_WAIT  
tcp        0      0 localhost:15454         localhost:59371         TIME_WAIT  
tcp6       0      0 [::]:http-alt           [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 user-chat_:ssh 10.240.179.70:43154     ESTABLISHED


user@chat_room:~/workspace (master) $ lsof -i
COMMAND     PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
mysqld     2316 ubuntu   10u  IPv4 351539621      0t0  TCP *:mysql (LISTEN)
apache2    2374 ubuntu    4u  IPv6 351539675      0t0  TCP *:http-alt (LISTEN)
apache2    2381 ubuntu    4u  IPv6 351539675      0t0  TCP *:http-alt (LISTEN)
apache2    2382 ubuntu    4u  IPv6 351539675      0t0  TCP *:http-alt (LISTEN)
apache2    2383 ubuntu    4u  IPv6 351539675      0t0  TCP *:http-alt (LISTEN)
apache2    2384 ubuntu    4u  IPv6 351539675      0t0  TCP *:http-alt (LISTEN)
apache2    2385 ubuntu    4u  IPv6 351539675      0t0  TCP *:http-alt (LISTEN)
vfs-worke 13915 ubuntu   13u  IPv4 352221394      0t0  TCP localhost:17123 (LISTEN)
1
  • What command are you using to launch to Node.js server? Commented Feb 25, 2015 at 20:06

3 Answers 3

3

I would say the error said it all:

Important: use process.env.PORT as the port and process.env.IP as the host in your scripts!

Your environment wants you to use process.env.PORT and process.env.IP for port and ip respectively (is that cloud9?), but on this line you're using another environmental variable:

app.set('port', process.env.app_port || 8080)

Fix:

app.set('port', process.env.PORT || 8080)

(In general, the EADDRINUSE error is for when another process is listening to that port)

For the 404 error

EDIT: the code posted before was for an old version of Express. See http://socket.io/docs/#using-with-express-3/4

Sign up to request clarification or add additional context in comments.

8 Comments

Thanks, but I am getting this error: express has no method 'createServer' According to this answer stackoverflow.com/a/13499302/608388 express server is deprecated.
@ntechi see socket.io/docs/#using-with-express-3/4 I was posting code for an old version of express
tried, still getting 404 if tried with different port and EADDRINUSE error if using app.set('port', process.env.PORT || 3000); My app works if I run it on other then 8080 but 404 for socket file. Please check my updated code
Can you please post the updated code? Anyways, to check which ports are in use: cyberciti.biz/faq/…
added the outputs of open ports
|
3

Is it possible in your code that you're requesting to listen() to the same port at two locations in your source ? I don't see two listen calls, but I'm not that familiar with express or sockets to know if another function does this... it happened to me once though in a different situation.

Comments

0

List the processes running on the port 8080 by using command: lsof -i :8080, By using the PID of running processes Kill the instance which uses port 8080 by using command: kill -9 PID

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.