在windows,管理I/O套接字的模型有阻塞和非阻塞两类,linux也一样
windows select模型
请看此文: 服务器IO模型之Selectlinux select模型
其实原理跟windows是差不多的,只是处理过程在底层上有点区别
模型:int select(int maxfd,fd_set*readfds,fd_set* writefds,fd_set*exceptfds,const struct timeval*timeout)
这里主要是maxfd,文件描述符的范围,比待检测的最大文件描述符大1
处理过程:也是先将监控的文件添加到文件描述符集合中,调用select监控,判断文件是否发生变化,但是在底层调用的确是poll方法;首先使用poll_wait将等待队列添加到poll_table中,返回描述符的掩码
poll原型:unsigned int (*poll)(struct file*filp,poll_wait* wait)
看如下一个简单的处理过程
unsigned int mem_poll(struct file *filp, p