📄 p12-13.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"int make_socket(unsigned short int port);void doit(int);int main(void){ int server_sockfd, client_sockfd; int server_len, client_len; struct sockaddr_in client_address; server_sockfd = make_socket(2003); /* 创建连接队列,忽略子进程终止信号 */ listen(server_sockfd, 5); 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(client_sockfd){char buf[255]; int n; /* 接收并回应客户的消息 */ n = read(client_sockfd, buf, sizeof(buf)); sleep(5); /* 睡眠5秒仅为了演示需要 */ buf[n] = 0; write(client_sockfd, buf, n);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -