网络IPC非阻塞和异步I/O
生活随笔
收集整理的這篇文章主要介紹了
网络IPC非阻塞和异步I/O
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通常,recv函數沒有數據可用時會阻塞等待。同樣地。當套接字輸出隊列沒有祖公空間用來發送消息時,函數send會阻塞。在套接字非阻塞模式下,行為會改變。這種情況下,這些函數不會阻塞而失敗,設置errno為EWOULDBLOCK或者EAGAIN。當這些發生時,可以使用poll或者select來判斷何時能接受或者傳輸數據。
套接字機制有自己的方式來處理異步I/O.一些文獻中吧經典的基于套接字的異步I/O機制稱作“基于信號的I/O”以區別于實時擴展中的異步I/O機制。
在基于套接字的異步I/O中,當能夠從套接字中讀取數據,或者套接字寫隊列變得可用時,可以安排發送信號SIGIO。通過兩個步驟歐來使用異步I/O;
1:建立套接字擁有者關系,信號可以被傳送到合適的進程。
2:通知套接字當I/O操作不會阻塞時發信號告知。
可以使用三種方式來完成第一個操作步驟
1:在fcntl使用F_SETOWN命令(linux2.4.22支持)
2;在ioctl中使用FIOSETOWN命令(linux2.4.22不支持)
3:在ioctl中使用SIOCSPGRP命令(linux2.4.22支持)
要完成第二個操作,有兩個選擇:
1;在fcntl中使用F_SETFL命令并且啟用文件標志O_ASYNC。 (linux2.4.22支持)
2;在ioctl中使用FIOASYNC。(linux2.4.22支持)
采用信號sigaction函數來注冊接收到SIGIO所要做的處理。
總結
以上是生活随笔為你收集整理的网络IPC非阻塞和异步I/O的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内存管理段页
- 下一篇: java核心技术卷1学习思维导图