并发客户服务程序
途径:
1.多进程
2.多线程
3.单进程和select函数使用
4.单进程和poll函数使用
我们这里只研究第三种。
下面先看一下select函数的使用。
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
函数作用: select()允许一个程序监视多个文件描述符,直到一个或者多个文件描述符准备好了某种
I/O操作(比如,输入就绪)。文件描述符准备好(ready)的意思就是在这个描述符上可以无阻塞地执行有关的I/O操作。
该函数监视三个独立的文件描述符集。列在readfds集合中的文件描述符将被监视是否读准备好了(read ready)。
nfds:三个文件描述结合中最大的文件描述符+1
readfds:读文件描述符集合。
exceptfds:用于异常数据测试的文件描述符集。
writefds:写文件描述符集合。
timeout:函数调用时的超时指针。NULL,表示无限期。
三个指针都可为空。
相关宏:
FD_ZERO:初始化文件描述符集的每一位都为0。
如:fd_set read_sockets;
FD_ZERO(&read_sockets);
FD_SET:注册一个套接口。
int c;//套接口描述符
fd_set read_sockets;
...
FD_SET(c,&read_sockets);
FD_CLR:与FD_SET相反。
FD_ISSET:测试文件描述符是否在集合中
if (FD_ISSET(c,&read_sockets)) {
//套接口c在read_sockets集合中
} else {
//不在
}
并发客户服务程序
最新推荐文章于 2018-05-03 23:07:00 发布