typedef struct sockaddr *addr_t;
void killFun();
int dataFun(int connfd);
int main(int argc,char *argv[])
{
//AF_INET:ipv4
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0){
perror("socket");
return -1;
}
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(9999);
seraddr.sin_addr.s_addr = inet_addr("0.0.0.0");
if (-1 == bind(sockfd,(addr_t)&seraddr,sizeof(seraddr))){
perror("bind");
return -1;
}
printf("--bind--\n");
if(-1 == listen(sockfd,5)){
perror("listen");
return -1;
}
printf("--listen--\n");
struct sockaddr_in cliaddr;
socklen_t len = sizeof(cliaddr);
signal(SIGCHLD,killFun);
while(1)
{
int connfd = accept(sockfd,(addr_t)&cliaddr,&len);
if (connfd < 0){
perror("accept");
return -1;
}
pid_t pid;
if((pid = fork())<0){
perror("fork");
return -1;
}
else if(pid == 0){
close(sockfd);
dataFun(connfd);
}
else if(pid > 0){
close(connfd);
}
}
return 0;
}
int dataFun(int connfd)
{
while(1)
{
char buf[64] = {0};
sprintf(buf,"hello,i am %ld",(long)getpid());
write(connfd,buf,strlen(buf));
memset(buf,0,64);
int ret = read(connfd,buf,sizeof(buf));
if(ret <= 0){
printf("%ld:exit",(long)getpid());
exit(1);
}
printf("recv:%s\n",buf);
}
}
void killFun()
{
wait(NULL);
}
测试代码:多进程服务器
最新推荐文章于 2024-03-11 19:05:07 发布