Select函数——同步I/O多路复用
初次实现网络通信用的是thread多线程,使用3个线程分别接收client连接,发送和接收消息,经过何博士指导尝试使用select,该函数允许进程指示内核等待多个事件(读、写、异常)中的任何一个发生,并只在有一个或多个文件描述符准备就绪,或者经过参数timeval规定时间后激活。其中,如果可以在不阻塞的情况下执行相应的I/O操作(例如read(2)),则认为文件描述符已就绪。
头文件
#include <sys/select.h>
#include <sys/time.h>
注:在#include <sys/socket.h>后不需要上面两个头文件,想必是已包含在其中。
参数详解
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
nfds:文件描述符集合的数目,类似list的长度,index从0开始,所以数目为最大index+1;
fd_set(数据类型): file descriptors set文件描述符集合;<