Como eu reabro uma porta no Ubuntu?

1

Meu programa liga uma porta para escutar, depois que ela termina, a porta não fica disponível por um momento e qualquer tentativa de abrir a mesma porta novamente para escutar falhará nesse período de tempo. Eu preciso esperar por um tempo para reabrir a porta.

Eu precisarei vincular repetidamente a porta, porque preciso testar novamente o programa do servidor repetidamente. Existe algum comando linux que possa liberar a porta prematuramente, ou qualquer código de programação para fazer a mesma coisa? Eu codifico em C ++ e uso o framework gSOAP.

Basicamente eu vou ligar a porta usando

soap_bind(&newsoap, NULL, 13518, 100);

que eu vinculo o servidor para escutar na porta 13518 .

Versão do Ubuntu: 11.10

Eu tentei o mesmo código no Windows, e a porta está imediatamente disponível após o término do programa. Preciso fazer algumas etapas extras no linux para desvincular a porta antes que ela termine?

    
por Wong Wai Jie 29.02.2012 / 10:33

2 respostas

2

Você precisa vincular-se à opção de soquete SO_REUSEADDR para permite que a ligação subsequente seja bem-sucedida . No seu caso:

newsoap.bind_flags |= SO_REUSEADDR;
soap_bind(&newsoap, NULL, 13518, 100);
    
por 29.02.2012 / 11:00
0

Você precisa fechar o soquete. É um recurso de segurança, que uma porta aberta ficará bloqueada pelo kernel por algum tempo.

Eu não conheço o seu framework, você tem que olhar em seus documentos como fechar uma porta com ele. Eu usei apenas as chamadas diretas do kernel para usar as portas.

Você pode querer ler as páginas de manual de socket bind listen e mais algumas das páginas mencionadas para realmente entender como isso funciona.

    
por 29.02.2012 / 10:49

Tags