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 ocurre cuando un proceso 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 ocurre cuando un proceso intenta vincularse a un puerto que ya está ocupado por otro proceso. No es exclusivo de Node.js — el sistema operativo solo permite que un proceso escuche en un puerto dado a la vez, ya sea un servidor Node, un script de Python o cualquier otro programa, en Windows, macOS o Linux.

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.
  • •El mismo conflicto aparece fuera de Node.js también — un servidor Python, un servicio de Windows, o cualquier programa que intente usar un puerto que ya tiene otro.

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...

¿Programando en inglés?

Para arreglar esto, leíste inglés técnico real. Lingua-e tiene ejercicios gratis hechos igual: dailys, code reviews y situaciones reales de trabajo.

Practicar inglés para developers gratis