socket客户端意外断开时,服务端死掉,提示:断开的管道,代码在里面

jianghong78670 2007-06-27 01:26:14
错误原因:当客户端断开时,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子线程
}
//*/
}
}
...全文
518 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianghong78670 2007-06-27
  • 打赏
  • 举报
回复
问题已经解决了
signal(SIGPIPE,SIG_IGN);
结贴
jianghong78670 2007-06-27
  • 打赏
  • 举报
回复
请问,具体怎么做呢?
mymtom 2007-06-27
  • 打赏
  • 举报
回复
SIGPIPE的信号缺省会中止进程,所以需要用sigaction忽略SIGPIPE。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧