?? 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 + -