zoukankan      html  css  js  c++  java
  • 【Unix网络编程】chapter6 IO复用:select和poll函数

    chapter6
    6.1 概述
    I/O复用典型使用在下列网络应用场合。
    (1):当客户处理多个描述符时,必须使用IO复用
    (2):一个客户同时处理多个套接字是可能的,不过不叫少见。
    (3):如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字。
    (4):如果一个服务器既要处理TCP,又要处理UDP
    (5):如果一个服务器要处理多个服务或多个协议
    IO复用并非只限于网络,许多重要的应用程序也需要使用这项技术。

    6.2 I/O模型
    在Unix下可用的5种I/O模型的基本区别:
    (1)阻塞式I/O
    (2)非阻塞式I/O
    (3)I/O复用(select和poll)
    (4)信号驱动式I/O(SIGIO)
    (5)异步I/O(POSIX的aio_系列函数)
    6.2.1 阻塞式I/O
    6.2.2 非阻塞式I/O模型
    6.2.3 I/O复用模型
    有个I/O复用,我们就可以调用select或poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。
    6.2.4 信号驱动式I/O模型
    我们也可以用信号,让内核在描述符就绪时发送SIGIO信号通知我们。我们称这种模型为信号驱动式I/O
    6.2.5 异步I/O模型
    6.3 select函数
    该函数允许进程指示内核等待多个事件中的任何一个发生,并且在有一个或多个事件发生或经历一段指定的时间后才唤醒它。
    我们调用select告知内核对那些描述符(就读写或异常)感兴趣以及等待多长时间。
    #include <sys/select.h>
    #include <sys/time.h>
    int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, cosnt struct timeval *timeout);
    struct timeval
    {
    long tv_sec; //秒
    long tv_usec;//微妙
    };

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

    作者:长风 Email:844064492@qq.com QQ群:607717453 Git:https://github.com/zhaohu19910409Dz 开源项目:https://github.com/OriginMEK/MEK 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。 如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    羊皮卷的故事第三章
    羊皮卷的故事第五章
    羊皮卷的故事第八章羊皮卷之一
    羊皮卷的故事第十一章羊皮卷之四
    羊皮卷的故事第四章
    羊皮卷的故事第十章羊皮卷之三
    羊皮卷的故事第九章羊皮卷之二
    羊皮卷的故事第十二章羊皮卷之五
    POJ3264 Balanced Lineup RMQ
    HDUPattern and Text 枚举
  • 原文地址:https://www.cnblogs.com/zhaohu/p/8048001.html
Copyright © 2011-2022 走看看