nodejs EADDRINUSE error

15,333

Solution 1

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

Solution 2

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.

Share:
15,333
Niraj Chauhan
Author by

Niraj Chauhan

Updated on June 13, 2022

Comments

  • Niraj Chauhan
    Niraj Chauhan almost 2 years

    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)