一、思路
server进程通过accept()接收了一个连接请求。然后,子进程将作为“种籽”的server方插口关闭,而使用新的插口与client进程通信并为之提供服务。而父进程则把新的插口关闭,并再一次调用accept(),通过“种籽”插口来接收新的连接请求。
子进程注意事项有:父进程及时处理僵死的子进程,子进程运行结束就退出,不要产生一大堆后代······
二、编程实现
2.1 服务器端
#include<stdio.h>
#include<string.h>
#include<sys/socket.h> //socket() bind() listen() accept()
#include<arpa/inet.h> //htons()
#include<netinet/in.h> //inet_addr()
#include<signal.h> //signal()
#include<stdlib.h> //exit()
#include<assert.h> //assert()
void conn(int c) //供子进程使用
{
while(1)
{
char buf[128] = {'\0'};
int n = recv(c, buf, 127, 0);
if(n <= 0)
{
close(c);
break;
}
printf("%d: %s\n", c, buf);