1. 程式人生 > >UNP學習第六章

UNP學習第六章

服務 出錯 拷貝數據 超時 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學習第六章