
概述
阅读本文前,读者应了解基本的linux下socket的编程知识,了解常见的socket函数,同时对IO多路复用epoll有所了解。
1. 常见的网络模型
1.1 服务端-客户端连接原理
服务器编程中通常涉及三类socketfd, 先简单定义一下:
connfd:客户端调用connect与服务端建立连接。
listenfd: 服务端的监听套接字。
clientfd:服务端获取的已连接客户端套接字。

1.2 单线程阻塞模型
单线程阻塞式模型是最基础的网络模型,也是学习服务器开发中每个人接触的第一个网络模型。
单线程阻塞模型中:服务端只有一个线程,阻塞在accept函数上,等待客户端对listenfd成功建立连接。成功连接后处理返回的 connfd,直到处理完后才关闭该connfd。
listenfd=socket();// 初始化监听套接字
bind();// 绑定监听套接字和服务端地址
listen(listenfd);// 监听
while(1){intclientfd;// 主线程阻塞在 accept 上直到返回已连接套接字
if((clientfd=accept())>=0){// 如果返回 大于0,代表有新连接产生
dothing(clientfd);// 处理请求
close(clientfd);// 关闭连接
}}
