Como se conectar à porta immedeately, evitando socket_bind (): não é possível ligar o endereço?

0

Ao executar um código que deve ser lido a partir de uma porta TCP / IP, geralmente recebo a seguinte mensagem (dependendo exatamente de qual idioma foi usado):

socket_bind(): unable to bind address

Eu sei que isso acontece quando algum outro processo escuta essa porta / é ligado a essa porta (não sei a frase exata a descrever) e, portanto, meu código não pode escutar essa porta. No entanto, é o meu código que acabei de parar (por CTRL-C) que está bloqueando esta porta! Parece haver algum tempo limite envolvido e, depois de esperar algum tempo (cerca de 30 segundos), posso iniciar meu código para escutar nessa porta específica sem problemas.

Eu gostaria de saber:

  • Por que a porta ainda está bloqueada, embora eu tenha parado o código?
  • Como posso forçar o sistema a liberar essa porta para que eu possa reiniciar meu código e começar a ouvir essa porta?
por Alex 11.04.2013 / 18:05

1 resposta

4

Supondo que você esteja falando em C / C ++, use setsockopt() e SO_REUSEADDR . Isso permite a reutilização, desde que não haja nenhum processo ativo escutando essa porta.

Edit: A razão pela qual ainda está em uso é que você não fechou o soquete corretamente. Você Control-C matou. Você pode usar netstat para ver as portas que estão abertas ou ainda não estão completamente fechadas.

link

link

link

    
por 11.04.2013 / 18:48

Tags