目录
本例主要是让服务器能够同时处理多个客户端的连接请求。
程序流程
1. 创建基本的套接字,并绑定地址信息、设置监听;
2. 循环accept来接收连接请求,每接收一个连接请求,就创建一个子进程;
3. 在子进程中进行客户端与服务端的数据通信;
4. 在父进程中定义一个消息处理程序,用来等待子进程结束,从而防止僵尸进程的产生。
程序实例
#include<iostream>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
#include<errno.h>
#include<signal.h>
#include<sys/socket.h>
#include<sys/wait.h>
using namespace std;
#define SERV_IP "127.1.2.3"
#define SERV_PORT 8888
struct socket_info //将文件描述符与地址结构体绑定在一起
{
struct sockaddr_in sktaddr;
int fd;
};
void sigChild(int sig) //消息处理函数,当子进程退出时执行,用来回收子进程,防止僵尸进程
{
while(waitpid(-1,NULL,WNOHANG) > 0); //最后一个参数用WNOHANG,意味父进程非阻塞式等待子进程结束
}
int main()
{