c的问题:我下面这个程序是一个tcp server程序,运行正常,但是运行完之后总是产生一些子进程,关不掉,请大虾看一下,该如何解决??多

iceman09 2004-02-25 08:55:38
#include <unp.h>
#define MYPORT 3490
#define BACKLOG 10

void sigchld_handler(int s)
{
while(wait(NULL) > 0);
}

int main(void)
{
int sockfd,new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
struct sigaction sa;
int yes = 1;

if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("sock error \n");
exit(1);
}
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int))==-1)
{
perror("setsockopt error\n");
exit(1);
}

bzero(&my_addr,sizeof(struct sockaddr_in));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind error\n");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen error\n");
exit(1);
}

sa.sa_handler = sigchld_handler;
sigemptyset(&sa.sa_mask);
/*sa.sa_flags = SA_INTERRUPT;*/
if(sigaction(SIGCHLD,&sa,NULL)==-1)
{
perror("sigaction error\n");
exit(1);
}

while(1)
{
sin_size = sizeof(struct sockaddr_in);
if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))<0)
{
perror("accpet error \n");
continue;
}
printf("get connection from %s\n",inet_ntoa(their_addr.sin_addr));
if(!(fork()<0))
{
/*close(sockfd);*/
if(send(new_fd,"hello\n",10,0)==-1)
{
perror("send error \n");
close(new_fd);
break;
}
close(new_fd);
/*exit(0);*/
}
close(new_fd);
}
return 0;
}
...全文
31 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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