Eu tenho uma caixa Linux Slackware onde não consigo iniciar nenhum serviço que escute em uma porta específica no host local. Usando strace, descobri que o erro ocorre na bind()
chamada 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 tento começar a ouvir nessa porta, portanto não está relacionado ao processo em si. A saída de strace acima vem o comando strace -ff nc -l -p 874 -s 127.0.0.1
.
Portanto, isso sugere que já existe um processo na porta 874 do host local. No entanto, 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, 0.0.0.0:874
ele falha com o mesmo erro. Ouvir um dos endereços IP configurados em um nic funciona bem, e ouvir 127.0.0.2:874
também funciona bem. 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 olhar ou que outros comandos posso executar para obter mais informações?
Informação adicional:
- Kernel 4.1.31.
- O Selinux não é usado aqui.
- Tentando se conectar ao 127.0.0.1 com telnet retorna "Conexão recusada"
- Estou executando os comandos como root
netstat -na | grep 874
caso suas netstat
bandeiras atuais fossem muito restritivas.
iptables -S
saída?