select多路IO复用

多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。

主要使用的方法有三种:select、poll、epoll,这次介绍一下select。

select函数原形:

int select (int nfds,  fd_set *readset,  fd_set *writeset,
fd_set *exceptset,  const struct timeval * timeout);

参数一:监控所有文件描述符集里最大文件描述符加1,因为此参数会告诉内核检测前多少个文件描述符的状态
参数二:监控有读数据到达文件描述符集合,传入传出参数
参数三:监控写数据到达文件描述符集合,传入传出参数
参数四:监控异常发生达文件描述符集合,如带外数据到达异常,传入传出参数
参数五:定时阻塞监控时间,一个指向timeval结构的指针,用于决定select等待I/o的最长时间。如果为空将一直等待。
timeval结构的定义:
    struct timeval{
        long tv_sec; // seconds(秒)
        long tv_usec; // microseconds(微秒)
    }
成功返回:所有监听集合中,满足条件的总数,也就是你监听的读、写、异常全部满足加起来的总数。
失败返回错误码


对文件集合的操作函数,fd_set(文件集合, 实现是一个位图)
    void FD_CLR(int fd, fd_set *set);     //把文件描述符集合里fd清0
    int FD_ISSET(int fd, fd_set *set);     //测试文件描述符集合里fd是否置1
    void FD_SET(int fd, fd_set *set);     //把文件描述符集合里fd位置置为1
    void FD_ZERO(fd_set *set);             //把文件描述符集合里所有位清0

select注意事项:select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值