socket客户端意外断开时,服务端死掉,提示:断开的管道,代码在里面
错误原因:当客户端断开时,client_fd不存在了,造成:子线程错误,所以服务端死掉,但我不知道怎么解决,请各位给个意见
//
void * Socket_childthread(void *arg)
{
//CALLFUN Update = (CALLFUN)fun;
int * aaa=(int *)arg;
int bbb;
bbb=*aaa;
Cchildsocket *childsocket=new Cchildsocket(bbb);
listsocks.addsock(childsocket);
}
//生成socket的代码(说明:我要求每个请求都生成一个socket)
void Clisten::lis()
{
while(1)
{
int client_fd;
socklen_t sin_size = sizeof(struct sockaddr_in);
if ( (client_fd = accept(sockfd, (struct sockaddr *)&remote_addr,&sin_size )) == -1)
{
//perror("accept error!");
//continue;
}
//*/
if(client_fd>-1)
{
printf("receive a connection from%sclient_fd%d\n",inet_ntoa(remote_addr.sin_addr),client_fd);
if(!fork())
{
if(send(client_fd,"you are connected!\n",26,0)==-1)
{
perror("send error!");
//close(client_fd);
//exit(1);
}
}
pthread_t chilepthread;
//memcpy
pthread_create(&chilepthread,NULL,Socket_childthread,(void *)&client_fd);//socket子线程
}
//*/
}
}