UNP學習第六章
阿新 • • 發佈:2018-02-12
服務 出錯 拷貝數據 超時 select 模型 集合 指向 網絡
一、I/O復用典型的網絡應用場合
- 當客戶處理多個描述字時,必須使用I/O復用,這在前一段中已做了描述。
- 一個客戶同時處理多個套接口時可能的,但很少出現。
- 如果一個TCP服務器既要處理監聽套接口,又要處理已連接套接口,一般也要用到I/O復用。
- 如果一個服務器即要處理TCP,又要處理UDP。
- 如果一個服務器要處理多個服務或者多個協議。
二、I/O模型
一個輸入操作一般有兩個不同的階段:
1.等待數據準備好
2.從內核到進程拷貝數據
五個I/O模型基本區別:
- 阻塞I/O
- 非阻塞I/O模型
- I/O復用模型
- 信號驅動I/O模型
- 異步I/O模型
三、select函數
#include <sys/select.h> #include <sys/time.h> int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset const struct timeval *timeout); 返回:準備好描述字的正數目0超時,-1出錯
maxfdp1:整數值,集合中所有文件描述符範圍,所有文件描述符最大值+1
readset:指向一組等待可讀性檢查的套接口
writeset:指向一組等待可寫性檢查的套接口
exceptset:指向一組等待錯誤檢查的套接口
timeout:select()最多等待時間,對阻塞操作則為NULL
timeout有三種可能:
1.永遠等待下去:僅在有一個描述字準備好I/O時才返回,為此,我們將參數timeout設置為空指針
2.等待固定時間:再有一個描述字準備好I/O後返回,但不超過timeout
3.根本不等待:檢查描述字後立即返回,這稱為輪詢。timeout指向0
UNP學習第六章