2013-04-10 113 views
1

经过两天尝试创建重新连接到服务器的客户端套接字,我想请求您的帮助。C插座重新连接

I.E.我正在启动一个服务器和一个客户端。比我杀了服务器,并希望该客户端尝试重新连接,直到我再次启动服务器。

我有一个功能socketcreate它返回socket_fd,我用它来第一次连接(和它的工作)。

但是,当服务器死了,我关闭之前的socket_fd,我尝试使用reconnect socketcreate我得到一个错误Bad file descriptor

但是为什么?我已经关闭了之前的socket_fd,我再次启动该功能以启动新的连接。

....

while(1) { 

    send(sock_fd, buf, strlen(buf),0); 

    if((numbytes = recv(sock_fd, buf, strlen(buf),0) == 0){ 

    close(sock_fd); 

    sock_fd = createsocket(); 

} 
  1. 是OK认识到丢失的连接(我读过,是的)。或者SIGPIPE会更好地识别send()期间丢失的连接?
  2. 如何重新连接while(1)?
+3

向我们展示您的代码 – 2013-04-10 10:31:49

+1

如果您使用的是unix套接字文件,那么在执行服务器之前删除/删除该文件(*或在将服务器*绑定之前删除),如果网络套接字那么SO_REUSEADDR – 2013-04-10 10:35:24

+0

@GrijeshChauhan: SO_REUSEADDR'指的是重用一个地址(例如192.168.0.1:12345),而不是重复使用已经存在的'close()'ed套接字。 – alk 2013-04-10 11:26:46

回答

2

后试图创建重新连接到服务器

停在那儿客户端套接字两天。重新连接套接字是不可能的。