网络编程中,我们经常讨论等待某个描述符准备好I/O(读/写)或者等待其上发生一个待处理的异常条件。尽管可读性和可写性对于普通文件这样的描述符显而易见,然而对于引起诸如select返回套接字“就绪”的条件我们必须讨论的更明确些。
套接字Select函数原型:
#include <sys/select.h> #include <sys/time.h> int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout); //maxfdp1 : 指定待测试的描述符的个数,它的值一般是待测试的最大描述符加1; //中间三个参数是要让内核测试读,写,异常条件的描述符; //返回:若有就绪描述符则为其数目,若超时则为0,若出错则为-1;
注意:当某个套接字上发生错误时,它将select标记为即可读又可写。而且,任何UDP套接字只要其发送低水位标记小于等于发送缓冲区大小就总是可写的,这是因为UDP套接字不需要连接。
原文地址:http://blog.csdn.net/keshacookie/article/details/40820469