1.一请求一进程模型
accept到客户端请求后fork出一个子进程
在主进程程close掉客户端对应的clientfd,
在子进程中用客户端对应的clientfd收发数据
2.多线程模型
accept到客户端请求后pthread_create出一个线程,线程参数为(void *)clientfd
在子线程中用客户端对应的clientfd收发数据
3.select模型
首先用FD_SET将监听fd添加到select的rdfds集合中,
////////////////////////////////////////////
调用select函数
用FD_ISSET判断监听fd是否可读,如果可读就accept出客户端fd,并将其添加到rdfds中
遍历所有之前就建立的客户端fd,用FD_ISSET判断其是否可读,如果可读就执行相关操作
///////////////////////////////////////////
4.epoll模型
调用epoll_create建立epfd
调用epoll_ctl将listenfd添加到epfd中
调用epoll_wait获取活跃的事件集合
遍历活跃的事件集合
判断对应事件是否是listenfd,如果是则将其添加到epfd中
如果不是则执行其收发数据函数
原文:https://www.cnblogs.com/zhangrd/p/11580093.html