我创建了一个简单的客户端/服务器 TCP 连接。
如果服务器已经在运行,并且客户端启动之后一切正常。
问题如果客户端在服务器之前启动 - >客户端以“Broken Pipe”退出
客户端代码:
char *sUceTcpIP="127.0.0.1";
int isUceTcpPort=51515;
struct sockaddr_in dest;
memset(&dest, 0, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(sUceTcpIP);
dest.sin_port = htons(isUceTcpPort);
while ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) <= 0) ;
while (connect(sockfd,(struct sockaddr *) &dest,sizeof(dest)) < 0)
{ sleep(1); }
strcpy(buffer,"sometext");
send(sockfd,buffer,strlen(buffer)+1,0); <---- Broken Pipe
gdb 回溯显示要从 /64/libc.so 中的 __so_send 调用的信号
我尝试将 NON-Blockin、Linger、Reuse、Sleeps 设置为客户端/服务器,但没有任何效果。
我也试过信号(SIGPIPE,SIG_IGN);在客户端
这似乎是一个巨大的BUG。
任何帮助/解决方法的人?