Lingua-e
← Errores
JavaScript

Qué significa EADDRINUSE: address already in use y cómo solucionarlo

Referencia del error

EADDRINUSE: address already in use

Lenguaje

JavaScript

Severidad

Alta

Cuándo ocurre

EADDRINUSE se lanza en Node.js cuando un servidor intenta vincularse a un puerto que ya está ocupado por otro proceso.

Posibles soluciones

Encuentra y elimina el proceso que usa el puerto: lsof -i :<puerto> en macOS/Linux, o netstat -ano | findstr :<puerto> en Windows. Usa una variable de entorno para el número de puerto para que diferentes entornos puedan usar puertos distintos. Agrega un manejador de errores en el objeto servidor para fallar con un mensaje claro en lugar de un crash no manejado.

Más detalles

EADDRINUSE se lanza en Node.js cuando un servidor intenta vincularse a un puerto que ya está ocupado por otro proceso. El sistema operativo solo permite que un proceso escuche en un puerto dado a la vez.

Por qué ocurre

  • Una instancia anterior del mismo proceso servidor no terminó correctamente y sigue ocupando el puerto.
  • Una aplicación diferente (una base de datos, otro servidor de desarrollo, un proxy) ya está escuchando en ese puerto.
  • El hot-reload o el modo watch reinició el proceso antes de que el socket TCP anterior se liberara completamente.
  • Ejecutar múltiples conjuntos de tests o instancias de servidor en paralelo sin asignar puertos diferentes.

Posibles soluciones

Encuentra y elimina el proceso que usa el puerto: lsof -i :<puerto> en macOS/Linux, o netstat -ano | findstr :<puerto> en Windows. Usa una variable de entorno para el número de puerto para que diferentes entornos puedan usar puertos distintos. Agrega un manejador de errores en el objeto servidor para fallar con un mensaje claro en lugar de un crash no manejado.

Ejemplos

JavaScript

Código que causa el error

const http = require("http");

const server = http.createServer((req, res) => {
  res.end("Hello");
});

server.listen(3000, () => console.log("Listening on port 3000"));

Error en la terminal

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1739:16)

Código corregido

const http = require("http");

const PORT = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.end("Hello");
});

server.on("error", (err) => {
  if (err.code === "EADDRINUSE") {
    console.error(`Port ${PORT} is in use. Kill the process or use a different port.`);
    process.exit(1);
  }
});

server.listen(PORT, () => console.log(`Listening on port ${PORT}`));

Practica en inglés

¿Cómo le explicarías un EADDRINUSE: address already in use a un compañero dev? Elige la frase correcta:

"I hit an error...

¿Listo para practicar tu inglés en el trabajo?

Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.

Prueba Lingua-e gratis