Pergunta

Eu levei Redes de Computadores no semestre passado e fez algumas C programar em linux (usando gcc) para meus projetos. Uma coisa extremamente entediante eu continuei correndo para foi se meu programa caiu ou parado (o que eu então teria que bater Ctrl + C para matá-lo), a porta de rede ainda seria deixada aberta por um minuto ou assim. Então, se eu queria correr imediatamente o programa novamente, eu teria que primeiro ir para o arquivo de cabeçalho, altere a porta, refazer o programa, e finalmente executá-lo. Obviamente, isso fica muito tedioso muito rápido.

Existe alguma maneira para configurá-lo onde o porto é imediatamente liberada logo que o processo é morto? Quer através de algum ajuste no linux ou no makefile para o meu programa, ou mesmo por meio de programação em C?

Editar:. Estou me referindo ao escrever um servidor e escolher uma porta específica para hospedar o programa

Foi útil?

Solução

Defina a do SO_REUSEADDR opção no soquete.

int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

A partir Guia do Beej para programação de rede.

Outras dicas

Aposto que é cerca de dois minutos :) Como @Cogsy observou, a opção de socket SO_REUSEADDR é seu amigo. Familiarizar-se com estados de TCP, é estado TIME_WAIT que lhe causa problemas:

 

Eu assumo o programa que você está escrevendo é um servidor, então você precisa usar uma porta conhecido. Se for esse o caso, você deve usar a opção SO_REUSE_ADDR no soquete como fora apontado por Cogsy.

Se por outro lado você está escrevendo um sw cliente, então você deve evitar a escolha de uma determinada porta, permitindo que o sistema para entregar-lhe um aleatório.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top