UNP——第六章,多路转接IO——select

       int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);

    struct timeval {
        long tv_sec; /* seconds */
        long tv_usec; /* microseconds */
        };

nfds

最大文件描述符+1

通过告诉内核最多需要检查的文件描述符数量,以提高效率,(否则内核需要检查所有的文件描述符)

至于为什么是最大文件描述符值+1,表示 需要检查的文件描述符的数量,原因是 文件描述符从0开始,而数量从1 开始。

readfds, writefds, exceptfds

都是传入传出参数

通过位掩码的方式表示监听的文件描述符

      void FD_CLR(int fd, fd_set *set);
       int  FD_ISSET(int fd, fd_set *set);
       void FD_SET(int fd, fd_set *set);
       void FD_ZERO(fd_set *set);

timeout

可以选择:

一直阻塞,直到有事件触发

阻塞一段时间,直到有事件触发

不阻塞,立即返回

阻塞可能被信号处理中断,而timeout不是传出参数,所以timeout不会记录剩余的等待时间,而是使用上次的值调用。

如果需要剩余的等待时间,可以在select调用前后记录系统时间以计算。

猜你喜欢

转载自www.cnblogs.com/yangxinrui/p/12393875.html
今日推荐