fd_isset函数原型规定如下: int fd_isset( int fd, fd_set *set ); 其中,fd为要检查的描述符,set是一个文件描述符集,可以是读、写、异常三种集合中的任意一种。 fd_isset函数返回值如下: 1.当描述符存在于指定的集合中时,返回真; 2.当描述符不存在于指定的集合中时,返回假; 3.当参数错误时,或者文件...
可以同时等待多个事件) 参数说明: 1)nfds:要监控的文件描述符的最大值加1,这个值不能错。
3.如果select被某个信号中断,它将返回-1并设置errno为EINTR。 4.如果出错,返回-1并设置相应的errno。 系统提供了4个宏对描述符集进行操作: #include <sys/select.h> #include <sys/time.h> void FD_SET(int fd, fd_set *fdset); void FD_CLR(int fd, fd_set *fdset); void FD_ISSET(int fd, ...
3.struct timeval结构用于描述一段时间长度,如果在这个时间内,需要监视的描述符没有事件发生则函数返回,返回值为0。 下面的宏提供了处理这三种描述词组的方式: 1. FD_CLR(inr fd,fd_set* set);用来清除描述词组set中相关fd 的位。 2. FD_ISSET(int fd,fd_set *set);用来测试描述词组set中相关fd 的位是...
FD_ISSET(5, &set); /*测试set的第5位是否为1,如果原来set是10000100,则返回非零,表明fd==5的文件描述符在set中,否则返回0*/ 注意:fd的最大值必须<FD_SETSIZE。 select函数的接口比较简单: int select(int nfds, fd_set* readset, fd_set* writeset, fe_set* exceptset, struct timeval* timeout)...
{ //这个大括号接上面的,返回0那么就超过了timeout预定的时间 //处理... } if(FD_ISSET(sock,&rfd)) { //有一个描述符准备好了 socka=accept(sock,0,0); //一个用来测试读 一个用来测试写 FD_ZERO(&rfd); FD_ZERO(&wfd); FD_SET(socka,&rfd);//把socka放入读描述符集 FD...
isset = FD_ISSET(3, &fdset); printf("isset = %d\n", isset); return0; } 当使用FD_SET添加完1、2、3、7后,fdset的值如下: 然后经过FD_CLR以后,fd_array[2]就被清除了,数组后面的数据依次往前提,即7被放到了fd_array[2] 所以isset前后两次打印的值分别为1和0 ...
FD_ISSET(int fd, fd_set *set):判断文件描述符fd是否在set中,如果在返回非零值,否则返回0。 在组合fd_sets时,可以使用这些宏来操作fd_set。例如,如果我们有三个文件描述符fd1、fd2和fd3,我们可以通过以下方式组合fd_sets: 代码语言:c 复制 fd_set read_fds;FD_ZERO(&read_fds);FD_SET(fd1,&re...
当select() 函数返回后,所给的 fd_set 里面只保留 ready 的 fd集合,也就是可读、可写、或者发生异常的 fd 集合。所以要使用 FD_ISSET() 函数检查特定 fd 是否还在 fd_set 集合里面。如果还在,说明这个 fd 发生了预期的事件,可以进行处理。 2.Recv(num)的num是否有存在的价值,似乎Recv()内部没有调用。