Eu tenho uma caixa linux do Slackware onde não consigo iniciar nenhum serviço que escuta em uma porta específica no host local. Usando strace, descobri que o erro ocorre na chamada bind()
e o erro é EADDRINUSE (Address already in use)
:
bind(3, {sa_family=AF_INET, sin_port=htons(874), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EADDRINUSE (Address already in use)
Isso acontece com qualquer processo que eu tento começar a escutar nessa porta, por isso não está relacionado ao processo em si. A saída strace acima vem do comando strace -ff nc -l -p 874 -s 127.0.0.1
.
Então, isso sugere que há um processo que já está escutando na porta 874 do localhost. Entretanto, parece que não consigo encontrá-lo. Os seguintes comandos não retornam nada:
netstat -aplunt | grep :874
netstat -na | grep :874
lsof -i :874
lsof -i tcp | grep 874
fuser 874/tcp
socklist | grep 874
iptables -t filter -S | grep 874
iptables -t nat -S | grep 874
iptables -t mangle -S | grep 874
conntrack -L | grep 874
Se eu tentar ouvir em 0.0.0.0:874
, ele falhará com o mesmo erro. Ouvir em um dos endereços IP configurados em um nic funciona OK, e ouvir 127.0.0.2:874
também funciona OK. Ouvir em uma porta diferente funciona bem, também em 127.0.0.1
ou 0.0.0.0
.
Então, agora estou curioso. Como posso descobrir por que a pilha de rede retorna EADDRINUSE aqui? Que outras coisas eu poderia ver ou que outros comandos posso executar para obter mais informações?
Informação adicional:
- Kernel 4.1.31.
- Selinux não é usado aqui.
- Tentando se conectar a 127.0.0.1 com o telnet retorna "Conexão recusada"
- estou executando os comandos como root