title: How can I solve EADDRINUSE in nodejs?
body: <p>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:</p>
  <pre><code>const host = 'localhost';
  const port = 8000;
  const http=require('http')
  const fs = require('fs')
  const express = require(&quot;express&quot;);
  const cors = require(&quot;cors&quot;);
  const app = express();
  
  
  
  const requestListener = function (req, res) {
    res.writeHead(200);
    res.end()
  }
  
  const server = http.createServer(requestListener);
  
  const corsOptions = {
    origin: &quot;http://localhost:4200&quot;,
    optionsSuccessStatus: 200, // For legacy browser support
    methods: &quot;GET, POST&quot;
  };
  app.use(cors(corsOptions));
  
  
  app.listen(port, function() {
    console.log(&quot;Listening on &quot; + port);
  });
  server.listen(port, host, () =&gt; {
    console.log(`Server is running on http://${host}:${port}`);
  });
  </code></pre>
  <p>When I try to run this server with <code>node httpController.js</code> my terminal gives me this error:</p>
  <pre><code>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
  </code></pre>
  <p>I thought that there was a server running in my port 8000 so I put in the terminal this command <code>lsof -i tcp:8000</code> 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>
  <p>P.S. This is the output of <code>netstat -tulpn</code>:</p>
  <pre><code>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                 :::*                                -          
  </code></pre>
  <p>This is the output of <code>strace -e trace=network node httpController.js</code>:</p>
  <pre><code>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, &quot;::&quot;, &amp;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, &quot;::1&quot;, &amp;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 +++
  </code></pre>