在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件中有这样的声明:
#define __FD_SETSIZE 1024
表示select最多同时监听1024个fd,当然,可以通过修改头文件再重新编译内核来扩大这个数目,但这似乎并不治本。(引自《使用EPOLL进行网络编程》,这篇文章主要是进行一个读写事件的总结,不会过多地讨论epoll,而且本人也是初学)
一、select/poll中的读写事件
1.下列四个条件中的任何一个满足时,套接口准备好多:
a. 有数据可读,专业的说法是:套接字接收缓冲区中的数据字节数大于等于套接字接收缓冲区低潮限度的当前值。可以使用套接字选项SO_RCVLOWAT来设置低潮限度,对于TCP和UDP套接字,其值缺省为1
&n