bind() Failed

1. bind() Failed

Fabio
bozux

(usa Debian)

Enviado em 28/02/2007 - 15:49h

Finalmente estou conseguindo fazer um TCPServer, porém se eu rodo e fecho a aplicação algumas vezes, depois de algumas vezes dá um erro na hora do "BIND" e me retorna a seguinte mensagem:

bind() failed Address already in use

Será que é porque eu finalizo o programa sem liberar a porta e ela continua "presa".

Alguém sabe como resolver esse problema?

Vlw!


  


2. Re: bind() Failed

Wander Daniel Domingues
wddlinux

(usa Debian)

Enviado em 06/03/2007 - 11:18h

...bom faz um tempo que nao uso isso, mas se ajudar, lembro que era comum dar esse erro quando a função servidora "caia" e os clientes continuavam abertos...a soloção era fechar todas as funcões e logo apos inicializar a função servidora e depois as funcoes de cliente.....


3. Re: bind() Failed

Diego da Silva de Medeiros
diegotosco

(usa Slackware)

Enviado em 06/03/2007 - 20:17h

Olá, faz um tempo que não apareço por aqui...

Esse Bind Failed acontece por causa de um estado das conexões TCP, que é o TIME WAIT. Ele acontece quando a conexão é terminada, e é usado para o reestabelecimento da conexão. A conexão fica aberta pelo sistema operacional por um tempo (em geral 30 segundos) para garantir que a conexão foi perdida. Como se muda esse tempo nem meu professor sabia, mas se tiver um tempinho, dê uma olhada no artigo (em inglês):
http://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/

Espero que tenha ajudado em alguma coisa.
Falô


4. Achei a solução!

Fabio
bozux

(usa Debian)

Enviado em 13/03/2007 - 08:58h

Agradeço a todos a ajuda.
Achei a solução e é a seguinte:

Após a função socket inserir a função setsockopt. Com essa função o problema NUNCA mais ocorreu, e olha q eu testei bastante hein!!!

...

if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
printf("socket() failed");

memset(&echoServAddr, 0, sizeof(echoServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
echoServAddr.sin_port = htons(port);

int optval = 65535;
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1)
printf("setsockopt() failed");

if (bind(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
printf("bind() failed");

...


+ 1 x...
Obrigado!

Té mais,
Fábio


5. setsockopt

Ricardo
ricardo13

(usa Fedora)

Enviado em 12/09/2008 - 16:59h

olá pessoal,

é o seguinte ..... eu queria saber pra q ela serve.

to precisando fazer um cliente auto discovery ...... ele envia msg por broadcasting para descobrir o servidor ...... e dai me falaram pra usar essas função.

Muito Obrigado

Ricardo






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts