select()

select(),肯定一個或多個 套接口的狀態,本函數用於肯定一個或多個套接口的狀態,對每個套接口,調用者可查詢它的可讀性、可寫性及錯誤狀態信息,用 fd_set結構來表示一組等待檢查的套接口,在調用返回時,這個結構存有知足必定條件的 套接口組的子集,而且select()返回知足條件的套接口的數目。有一組宏可用於對fd_set的操做,這些宏與Berkeley Unix軟件中的兼容,但內部的表達是徹底不一樣的。
中文名
select()
做    用
肯定套接字
系    統
unix
返    回
知足條件的套接口的數目

簡述編輯

肯定一個或多個 套接口的狀態,如:須要則等待。
#include < winsock.h>
int PASCAL FAR select( int nfds, fd_set FAR* readfds, fd_set FAR* writefds, fd_set FAR* exceptfds, const struct timeval FAR* timeout);
nfds:是一個整數值,是指集合中全部 文件描述符的範圍,即全部文件描述符的最大值加1,不能錯!在Windows中這個參數的值無所謂,能夠設置不正確。
readfds:(可選) 指針,指向一組等待可讀性檢查的套接口。
writefds:(可選)指針,指向一組等待可寫性檢查的套接口。
exceptfds:(可選)指針,指向一組等待錯誤檢查的套接口。
timeout:select()最多等待時間,對阻塞操做則爲NULL。

註釋編輯

readfds參數標識等待可讀性檢查的套接口。若是該套接口正處於監聽 listen()狀態,則如有鏈接請求到達,該套接口便被標識爲可讀,這樣一個 accept()調用保證能夠無阻塞完成,對其餘套接口而言,可讀性意味着有排隊數據供讀取。或者對於SOCK_STREAM類型套接口來講,相對於該套接口的虛套接口已關閉,因而 recv()recvfrom()操做均能無阻塞完成,writefds參數標識等待可寫性檢查的套接口。若是一個套接口正在 connect()鏈接(非阻塞),可寫性意味着鏈接順利創建。若是套接口並未處於connect()調用中,可寫性意味着 send()sendto()調用將無阻塞完成。〔但並未指出這個保證在多長時間內有效,特別是在多線程環境中〕。
exceptfds參數標識等待帶外數據存在性或意味錯誤條件檢查的套接口,請注意若是設置了SO_OOBINLINE選項爲假FALSE,則只能用這種方法來檢查帶外數據的存在與否,對於SO_STREAM類型套接口,遠端形成的鏈接停止和KEEPALIVE錯誤都將被做爲意味出錯。若是套接口正在進行鏈接connect()(非阻塞方式),則鏈接試圖的失敗將會表如今exceptfds參數中。
若是對readfds、writefds或exceptfds中任一個組類不感興趣,可將它置爲空NULL。
在winsock.h頭文件中共定義了四個宏來操做描述字集。FD_SETSIZE變量用於肯定一個集合中最多有多少描述字(FD_SETSIZE缺省值爲64,可在包含winsock.h前用#define FD_SETSIZE來改變該值)。對於內部表示,fd_set被表示成一個套接口的隊列,最後一個有效元素的後續元素爲INVAL_SOCKET。宏爲:FD_CLR(s,*set):從集合set中刪除描述字s。 FD_ISSET(s,*set):若s爲集合中一員,非零;不然爲零。 FD_SET(s,*set):向集合添加描述字s。FD_ZERO(*set):將set初始化爲空集NULL。
timeout參數控制select完成的時間。若timeout參數爲空指針,則select將一直阻塞到有一個描述字知足條件,不然的話,timeout指向一個 timeval結構,其中指定了select調用在返回前等待多長時間。若是timeval爲{0,0},則select當即返回,這可用於探詢所選套接口的狀態,若是處於這種狀態,則select調用可認爲是非阻塞的,且一切適用於非阻塞調用的假設都適用於它,舉例來講,阻塞 鉤子函數不該被調用,且WINDOWS 套接口實現不該yield。

返回值編輯

select()調用返回處於就緒狀態而且已經包含在fd_set結構中的描述字總數;若是超時則返回0;不然的話,返回SOCKET_ERROR錯誤,應用程序可經過WSAGetLastError獲取相應錯誤代碼。
當返回爲-1時,全部描述符集清0。
當返回爲0時,超時不修改任何描述符集。
當返回爲非0時,在3個描述符集裏,依舊是1的位就是準備好的描述符。這也就是爲何,每次用select後都要用FD_ISSET的緣由。

錯誤代碼編輯

WSANOTINITIALISED:在使用此 API以前應首先成功地調用WSAStartup()。
WSAENETDOWN:WINDOWS 套接口實現檢測到網絡子系統失效。
WSAEINVAL:超時時間值非法,
WSAEINTR:經過一個 WSACancelBlockingCall()來取消一個阻塞的
WSAEINPROGRESS:一個阻塞的WINDOWS套接口調用正在運行中。
WSAENOTSOCK:描述字集合中包含有非套接口的元素。

相關參考編輯

WSAAsyncSelect(), accept(), connect(), recv(), recvfrom(),send()。

事件用法編輯

概述
觸發每個匹配元素的select事件
這個函數會調用執行綁定到select事件的全部函數,包括瀏覽器的默認行爲。能夠經過在某個綁定的函數中返回false來防止觸發瀏覽器的默認行爲。
返回值
jQuery
示例
觸發全部input元素的select事件:
jQuery 代碼:
$("input").select();
相關文章
相關標籤/搜索