📄 parallel_server_fork.c
字号:
#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <signal.h>#include <unistd.h>#include "err_exit.h"#include "socketfun.h"void doit(int client_sockfd);int main(int argc,char ** argv){ int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_in client_address; server_sockfd=make_socket(PARALLELPORT); /* 创建连接队列,忽略子进程终止信号 */ listen(server_sockfd,LISTENQ); signal(SIGCHLD,SIG_IGN); while(1){ printf("server waiting\n"); /* 接收连接 */ client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len); /* 为这个客户创建一个子进程 */ if(fork()==0){ /* 若为子进程,接收并回答客户的消息 */ close(server_sockfd); /* 子进程关闭侦听套接字 */ doit(client_sockfd); /* 处理客户的请求 */ close(client_sockfd); /* 已处理完该客户的请求 */ exit(0); /* 子进程终止 */ }else{ close(client_sockfd); /* 父进程关闭被连接的套接字 */ } }}void doit(int client_sockfd){ char buf[MAXBUFFSIZE]; int n; /* 接收并回应客户的消息 */ n=read(client_sockfd,buf,sizeof(buf)); buf[n]=0; printf("string from cliet=%s\n",buf); sleep(5); write(client_sockfd,buf,n); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -