I state that I'm using a linux Os in particular I'm using Garuda linux with linux-zen kernel. I have found this problem in my arch OS and in a debian Os (Ubuntu 21.10) but not in windows and in macOS. I created a javascript server in this way:
const host = 'localhost';
const port = 8000;
const http=require('http')
const fs = require('fs')
const express = require("express");
const cors = require("cors");
const app = express();
const requestListener = function (req, res) {
res.writeHead(200);
res.end()
}
const server = http.createServer(requestListener);
const corsOptions = {
origin: "http://localhost:4200",
optionsSuccessStatus: 200, // For legacy browser support
methods: "GET, POST"
};
app.use(cors(corsOptions));
app.listen(port, function() {
console.log("Listening on " + port);
});
server.listen(port, host, () => {
console.log(`Server is running on http://${host}:${port}`);
});
When I try to run this server with node httpController.js my terminal gives me this error:
Listening on 8000
node:events:368
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use ::1:8000
at Server.setupListenHandle [as _listen2] (node:net:1330:16)
at listenInCluster (node:net:1378:12)
at GetAddrInfoReqWrap.doListen [as callback] (node:net:1516:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:74:8)
Emitted 'error' event on Server instance at:
at emitErrorNT (node:net:1357:8)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
code: 'EADDRINUSE',
errno: -98,
syscall: 'listen',
address: '::1',
port: 8000
}
Node.js v17.3.0
I thought that there was a server running in my port 8000 so I put in the terminal this command lsof -i tcp:8000 but it doesn't give me any response probably because ther isn't any server running in my port. To be more secure I change the port of my server but the response is the same (EADDRINUSE). What can I do?
P.S. This is the output of netstat -tulpn:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:46239 0.0.0.0:* LISTEN 8612/app --node-int
udp 0 0 0.0.0.0:59437 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:35238 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:52008 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:56124 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:43991 0.0.0.0:* -
udp 0 0 0.0.0.0:56391 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:56902 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:53119 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:41038 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:58315 0.0.0.0:* 9540/firefox
udp 0 0 0.0.0.0:5353 0.0.0.0:* -
udp 0 0 0.0.0.0:54602 0.0.0.0:* 9540/firefox
udp6 0 0 :::42912 :::* -
udp6 0 0 fe80::a715:e177:7d3:546 :::* -
udp6 0 0 :::5353 :::* -
This is the output of strace -e trace=network node httpController.js:
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 20
setsockopt(20, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(20, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
bind(20, {sa_family=AF_INET6, sin6_port=htons(8000), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::", &sin6_addr), sin6_scope_id=0}, 28) = 0
listen(20, 511) = 0
Listening on 8000
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 21
setsockopt(21, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(21, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
bind(21, {sa_family=AF_INET6, sin6_port=htons(8000), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_scope_id=0}, 28) = -1 EADDRINUSE (Indirizzo già in uso)
node:events:368
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use ::1:8000
at Server.setupListenHandle [as _listen2] (node:net:1330:16)
at listenInCluster (node:net:1378:12)
at GetAddrInfoReqWrap.doListen [as callback] (node:net:1516:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:74:8)
Emitted 'error' event on Server instance at:
at emitErrorNT (node:net:1357:8)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
code: 'EADDRINUSE',
errno: -98,
syscall: 'listen',
address: '::1',
port: 8000
}
Node.js v17.3.0
+++ exited with 1 +++