¿Qué está usando el puerto 5000 en Mac? (Es AirPlay Receiver)
macOS Monterey y versiones posteriores reservan los puertos 5000 y 7000 para AirPlay Receiver. Aquí te explicamos cómo confirmarlo y resolver el conflicto con tu servidor de desarrollo.
Intentas iniciar tu app de Flask (u otro servidor de desarrollo que usa el puerto 5000 por defecto) y de inmediato aparece esto:
Error: listen EADDRINUSE: address already in use :::5000
No iniciaste nada más. El culpable es el propio macOS.
AirPlay Receiver lo está usando
macOS Monterey (12), lanzado a finales de 2021, incorporó AirPlay Receiver como función nativa. Permite que tu Mac reciba transmisiones AirPlay desde un iPhone u otra Mac, igual que un Apple TV.
El problema: AirPlay Receiver vincula los puertos 5000 y 7000 automáticamente cuando está activado. El proceso que ocupa esos puertos es ControlCenter, una parte de macOS. Desde que salió Monterey, esto ha tomado por sorpresa a muchos desarrolladores.
Si tu Mac actualizó de Big Sur a Monterey o posterior, AirPlay Receiver se activó sin avisarte. El puerto 5000, que antes estaba libre, quedó reservado permanentemente.
Cómo confirmarlo
Ejecuta esto en Terminal:
lsof -i :5000
Si AirPlay Receiver es la causa, verás algo como esto:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ControlCe 423 aaron 33u IPv4 0xabcd1234 0t0 TCP *:5000 (LISTEN)
ControlCe 423 aaron 34u IPv6 0xabcd5678 0t0 TCP *:5000 (LISTEN)
ControlCe es la versión abreviada de ControlCenter. Si ves ese proceso ocupando el puerto 5000, AirPlay Receiver es la causa.
Solución 1: Desactivar AirPlay Receiver
La solución más rápida es desactivar AirPlay Receiver por completo. La ruta depende de tu versión de macOS:
macOS Ventura, Sonoma o Sequoia: Configuración del Sistema > General > AirDrop y Handoff > AirPlay Receiver (toggle apagado)
macOS Monterey: Preferencias del Sistema > Compartir > AirPlay Receiver (desmarcar)
Una vez que lo desactives, los puertos 5000 y 7000 quedan liberados de inmediato. No es necesario reiniciar. Puedes iniciar tu servidor de desarrollo enseguida.
Solución 2: Cambiar el puerto de tu app
Si usas AirPlay y quieres mantenerlo activo, simplemente configura tu servidor de desarrollo para usar otro puerto.
Flask:
flask run --port 5001
Next.js:
PORT=5001 next dev
Python http.server:
python -m http.server 5001
Cualquier puerto libre por encima de 1024 funciona. El puerto 5001 es la alternativa más común para Flask, ya que es el siguiente disponible y está fuera del rango de AirPlay.
¿Qué pasa con el puerto 7000?
La misma causa. ControlCenter también vincula el puerto 7000 cuando AirPlay Receiver está activo. Si tienes un conflicto en el puerto 7000, la solución es idéntica: desactiva AirPlay Receiver en Configuración del Sistema (o Preferencias del Sistema), o cambia el puerto de tu app.
Ejecutar lsof -i :7000 mostrará el mismo proceso ControlCe si AirPlay Receiver está activo.
Usando Portie
Si prefieres no usar Terminal, Portie muestra todos los puertos abiertos en tu Mac con el proceso correspondiente, actualizado automáticamente cada 3 segundos. Puedes ver a ControlCenter ocupando los puertos 5000 y 7000 en cuanto abres la app, sin escribir ningún comando.
La lista de puertos en tiempo real es gratuita. El desbloqueo de $8.99 (pago único) agrega la opción de terminar procesos directamente desde la lista y hacer escaneo de puertos remotos.