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