zoukankan      html  css  js  c++  java
  • 网络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/

  • 相关阅读:
    Linux下vi命令大全
    Ubuntu的cron日志在哪里?
    如何使用DNN中的Calendar控件
    对DNN的理解:
    “SQL Server does not allow remote connections”错误的解决
    如何去除Search Skin ojbect中的"web"和"site"选项按键
    DNN发邮件通知4.8.2有漏洞,最好升级到新版本
    模块开发中一点疑惑?
    经典ASP代码大集合
    漂亮button
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3567713.html
Copyright © 2011-2022 走看看