linux socket服务到底要怎么写,才能正常回收进程?

浮生若水422 2019-04-04 01:34:16
设置了setsockopt,也搞了signal(SIGCHLD, handler);,主要想处理socket通讯超时的问题。
但是如果一个客户端连上来,啥消息也不发,直接断开以后。

服务端会死循环不停输出 printf ("成功处理一个子进程的退出\n");


void handler(int sig)
{

while (waitpid(-1, NULL, WNOHANG) > 0)
{
printf ("成功处理一个子进程的退出\n");
}
}

int main()
{
int listen_socket = Creat_socket();


signal(SIGCHLD, handler); //处理子进程,防止僵尸进程的产生
while(1)
{
int client_socket = wait_client(listen_socket); //多进程服务器,可以创建子进程来处理,父进程负责监听。
int pid = fork();
if(pid == -1)
{
perror("fork");
break;
}
if(pid > 0)
{
close(client_socket);
continue;
}
if(pid == 0)
{
close(listen_socket);


struct timeval timeout;
timeout.tv_sec=60;
timeout.tv_usec=0;


if (-1 ==setsockopt(client_socket,SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,sizeof(timeout)))
{


}
if (-1 ==setsockopt(client_socket,SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,sizeof(timeout)))
{


}


hanld_client(listen_socket, client_socket);
break;
}
}

close(listen_socket);

return 0;
}
...全文
53 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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