EADDRINUSE (errno 98)
errno 98
Messaggio ufficiale (come appare sullo schermo): Address already in use
Cercato anche come: Address already in use, errno 98, listen EADDRINUSE, address already in use :::3000
Che cosa significa
EADDRINUSE, «Address already in use» (errno 98 su Linux, 48 su macOS), significa che un programma ha provato a collegarsi a un indirizzo IP e a una porta già occupati da un altro socket. Node.js lo mostra come 'listen EADDRINUSE: address already in use :::3000'. Di solito c'è ancora in esecuzione una vecchia istanza.
Si applica a: Linux, macOS (errno BSD), WSL, Container Docker
Come risolvere EADDRINUSE (errno 98)
- Trova il processo che occupa la porta: 'sudo lsof -i :3000' oppure 'sudo ss -ltnp | grep :3000' (Windows: 'netstat -ano | findstr :3000')
- Arresta quel processo in modo ordinato, oppure con 'kill <pid>' se è un server di sviluppo rimasto attivo
- Cerca servizi duplicati: un'unità systemd, un container Docker ('docker ps') o un processo PM2 potrebbe già eseguire la stessa app
- Cambia la porta della tua applicazione se entrambi i servizi devono restare attivi
- Dopo un riavvio, imposta SO_REUSEADDR sui socket del server così le connessioni in TIME_WAIT non impediscono il nuovo binding
- Se succede nei test, assegna a ogni server di test la porta 0 in modo che il sistema operativo scelga una porta libera
Perché succede
Normalmente un solo socket può collegarsi a una data coppia indirizzo/porta. Il conflitto è causato da server di sviluppo orfani, da una seconda copia del servizio, dai port mapping di Docker e da socket in TIME_WAIT senza SO_REUSEADDR.
Domande frequenti
Come termino il processo sulla porta 3000?
Esegui 'lsof -i :3000' per ottenere il PID, poi 'kill <PID>'. Su Windows usa 'netstat -ano | findstr :3000' e poi 'taskkill /PID <PID> /F'.
Perché la porta risulta in uso se non c'è nulla in esecuzione?
Un'istanza precedente potrebbe essere ancora in fase di arresto o bloccata in TIME_WAIT, oppure un container o un servizio di sistema la sta occupando.
Errori correlati
Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)
Ultimo aggiornamento: