编写代码之前,大概先说一下利用select编写tcp的思路及select特点。
select系统调用是用来让程序监视多个文件句柄的状态变化的,程序会停在select这里等待,直到被监视的句柄有一个或者多个发生了状态改变。
select函数为:int select(int nfds,fd_set *readfds,fd_set* writefds,异常文件描述符,时间长度)//默认时间长度异常事件描述符一般都为NULL
在select中提出四个宏来处理描述数组的方式:(fd为文件描述符集set为描述数组)
FD_SET(fd,fd_set* set):用来设置set中fd位
FD_ISSET(fd,fd_set* set):用来测试set中额相关fd位是否为真
FD_ZERO(fd,fd_set* set):用来清除set的全部位
FD_CLR(fd_set*set):用来清除set中相关的fd的位
当然select的模型最终的特点如下:(1)select下可监控的文件描述符的个数取决于系统的大小
(2)每次检测到一个新的fd,都要手动的将fd添加到set中,并且使用一个数据结构arrar来保存select监控集中的set
(3)select模型必须在设了select前循环array
在大致了解了select的特点之后,现在就来说一说select 版的tcp的编写思路:
1:搭建好基本的tcp的框架,在服务器端编写-->生成套接字(starup),绑定端口(bind),监听(listen)模块,接受客户端访问(accept)模块<