SELECT 入門詳解

2021-06-05 10:13:48 字數 854 閱讀 4816

select模型要用的結構和函式如下:

fd_set,可以理解為檔案控制代碼的乙個集合,sock也可認為是乙個檔案控制代碼。

timeval,用來表示時間,結構體中的tv_sec表示秒,tv_usec表示毫秒。

int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); 通過這個函式進行查詢,返回值是所有socket的數目,這些socket包含在fd_set結構中,並且已完成準備工作。如果超時,則返回0,如果出錯,則返回socket_error。

使用過程一般遵循以下步驟:

1、宣告fd_set變數

2、初始化fd_set變數

3、關聯檔案控制代碼和fd_set變數

4、設定超時時間。

5、呼叫select看是否有可用的socket

6、呼叫fd_isset看究竟是哪個socket可用,對這個socket進行進一步操作。

原始碼如下:(或者見

while(true) 

; //select等待3秒,3秒輪詢,要非阻塞就置0

nretcode=select(0, &writefd, &readfd, null, &timeout);

if(socket_error==nretcode)

else if(nretcode>0)

} if(fd_isset(serversocket,&readfd)) //測試sock是否可讀,資料是來自哪個socket,

} }}

select函式詳解

select的機制中提供了乙個fd set的資料結構,實際上是long型別的陣列,每乙個陣列元素都能與一開啟的檔案控制代碼 不管是socket控制代碼,還是其他檔案或命名管道或裝置控制代碼 建立聯絡,建立聯絡的工作由程式設計師完成,當呼叫select 時,由核心根據io狀態修改fd set的內容,由...

select 函式詳解

select函式 系統提供select函式來實現多路復用輸入 輸出模型。原型 include include select函式 系統提供select函式來實現多路復用輸入 輸出模型。原型 include include int select int maxfd,fd set rdset,fd set...

select函式詳解

select 在socket程式設計中還是比較重要的,可是對於初學socket的人來說都不太愛用select寫程式,他們只是習慣寫諸如connect accept recv或recvfrom這樣的阻塞程式 所謂阻塞方式block,顧名思義,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如...