parallel_server_fork.c

来自「网络编程的服务端和客户端.包括用fork和select分别实现多进程编程和多线程」· C语言 代码 · 共 56 行

C
56
字号
#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 + =
减小字号Ctrl + -
显示快捷键?