• 网络IPC:套接字之非阻塞和异步I/O


    通常,recv函数没有数据可用时会阻塞等待。同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞。在套接字非阻塞模式下,行为会改变。在这种情况下,这些函数不会阻塞而是失败,设置errno为EWOULDBLOCK或者EAGAIN。当这些发生时,可以使用poll或select来判断何时能接收或者传输数据。

    在Single UNIX Specification中,其实时扩展包含对通用异步I/O机制的支持。套接字机制有自己的方式来处理异步I/O,但是在Single UNIX Specification中没有标准化。一些文献把经典的基于套接字的异步I/O机制称为“基于信号的I/O”,以区别于实时扩展中的异步I/O机制。

    在基于套接字的异步I/O中,当能够从套接字中读取数据,或者套接字写队列空间变得可用时,可以安排发送信号SIGIO。通过两个步骤来使用异步I/O:

    (1)建立套接字拥有者关系,信号可以被传送到合适的进程。

    (2)通知套接字当I/O操作不会阻塞时发信号告知。

    可以使用三种方式来完成第一个步骤:

    (1)在fcntl中使用F_SETOWN命令。

    (2)在ioctl中使用FIOSETOWN命令。

    (3)在ioctl中使用SIOCSPGRP命令。

    要完成第二个步骤,有两个选择:

    (1)在fcntl中使用F_SETFL命令并且启用文件标志O_ASYNC。

    (2)在ioctl中使用FIOASYNC。

    虽然有不少选择,但不是普遍得到支持。

    本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/

  • 相关阅读:
    freeswitch录音功能
    jdk安装
    maven阿里云镜像
    idea安装
    idea新建maven项目
    tomcat安装
    idea新建maven web项目
    idea新建java项目
    webpack使用
    ACE 安装指南及示例
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3567713.html
Copyright © 2020-2023  润新知