nodejs EADDRINUSE error
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.
Niraj Chauhan
Updated on June 13, 2022Comments
-
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)