zoukankan      html  css  js  c++  java
  • 《UNIX网络编程》之select IO

    select 函数的原理

    select 管理者

    用select来管理多个IO

    一旦其中的一个或者多个IO检测到我们所感兴趣的事件,

    select 函数返回,返回值为检测到的事件个数

    然后,遍历事件,进而去处理这些事件。

    select 原型:

    /* According to POSIX.1-2001 */
           #include <sys/select.h>
    
           /* According to earlier standards */
           #include <sys/time.h>
           #include <sys/types.h>
           #include <unistd.h>
    
           int select(int nfds, fd_set *readfds, fd_set *writefds,
                      fd_set *exceptfds, struct timeval *timeout);
    
           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);//清空集合

    参数:

    1. 读、写、异常集合中的文件描述符的最大值加1

    2. 读集合 输入输出参数

    3. 写集合 输入输出参数

    4. 异常集合 输入输出参数

    5. 超时时间 输入输出参数

    读、写、异常事件发生条件

    1. 可读1.1 套接口缓存区有数据可读;

    1.2 连接的读一半关闭,即接收到FIN段,读操作将返回0;对方close。

    1.3 如果是监听套接口,已完成连接队列不为空时;connect连接成功。

    1.4 套接口上发生了一个错误待处理,错误可以通过getsockopt指定SO_ERROR选项来获取。

    2. 可写2.1 套接口发送缓冲区有控件容纳数据;

    2.2 连接的写一半关闭。即收到RST段之后,再次调用write操作;

    2.3 套接口上发生了一个错误待处理,错误可以通过getsockopt制定SO_ERROR选项来获取。

    3. 异常3.1 套接口存在带外数据。

  • 相关阅读:
    ES6和Node.js的import和export
    重写Router.prototype.push后还报NavigationDuplicated错误的解决方法
    nightwatch对前端做自动化测试
    使用video.js 7在html中播放rtmp视频流
    UEFI开发环境搭建
    类的静态成员
    const成员函数
    类和结构
    最长递增子序列
    C语言将十六进制字符串转化成十六进制
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4029275.html
Copyright © 2011-2022 走看看