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,顧名思義,就是程序或是執行緒執行到這些函式時必須等待某個事件的發生,如...