1. 程式人生 > >select()函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

select()函式以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

舉個例子,比如recv(), 在沒有資料到來呼叫它的時候,你的執行緒將被阻塞,如果資料一直不來,你的執行緒就要阻塞很久.這樣顯然不好。所以採用select來檢視套節字是否可讀(也就是是否有資料讀了) 。
步驟如下——
socket s;
.....
fd_set set;
while(1)
{
FD_ZERO(&set);//將你的套節字集合清空
FD_SET(s, &set);//加入你感興趣的套節字到集合,這裡是一個讀資料的套節字s
select(0,&set,NULL,NULL,NULL);//檢查套節字是否可讀,
//很多情況下就是是否有資料(注意,只是說很多情況)
//這裡select是否出錯沒有寫
if(FD_ISSET(s, &set) //檢查s是否在這個集合裡面,
{ //select將更新這個集合,把其中不可讀的套節字去掉
//只保留符合條件的套節字在這個集合裡面
recv(s,...);
}
//do something here
}

相關推薦

檔案描述符——select()函式以及FD_ZEROFD_SETFD_CLRFD_ISSET

舉個例子,比如recv(), 在沒有資料到來呼叫它的時候,你的執行緒將被阻塞,如果資料一直不來,你的執行緒就要阻塞很久.這樣顯然不好。所以採用select來檢視套節字是否可讀(也就是是否有資料讀了) 。 步驟如下——socket s; ..... fd_set set; while(1) { FD_ZERO

select()函式以及FD_ZEROFD_SETFD_CLRFD_ISSET

舉個例子,比如recv(), 在沒有資料到來呼叫它的時候,你的執行緒將被阻塞,如果資料一直不來,你的執行緒就要阻塞很久.這樣顯然不好。所以採用select來檢視套節字是否可讀(也就是是否有資料讀了) 。 步驟如下——socket s; ..... fd_set set; while(1) { FD_ZERO

非同步套接字基礎:多路複用select函式以及FD_ZEROFD_SETFD_CLRFD_ISSET

select函式:       系統提供select函式來實現多路複用輸入/輸出模型。原型:        #include sys/time.h>        #include unistd.h>        int select(int maxfd,f

非同步套接字基礎:select函式以及FD_ZEROFD_SETFD_CLRFD_ISSET

select函式:           系統提供select函式來實現多路複用輸入/輸出模型。原型:         #include sys/time.h>         #include unistd.h>       select函式:    

$Django 聚合函式分組查詢F,Q查詢orm欄位以及引數

    一.聚合函式     from django.db.models import Avg,Sum,Max,Min,Count,F,Q   #匯入     # .查詢圖書的總價,平均價,最大

【python】詳解time模組功能asctimelocaltimemktimesleepstrptimestrftimetime等函式以及時間的加減運算

在Python中,與時間處理相關的模組有:time、datetime以及calendar。學會計算時間,對程式的調優非常重要,可以在程式中狂打時間戳,來具體判斷程式中哪一塊耗時最多,從而找到程式調優的重心處。這裡先來講一個time模組。 time模組所包含的函式能夠實現以下功能:獲取當前的時間、操作時間和日

jQuery的檔案引入入口函式以及js物件和jquery物件之間的互相轉換

JavaScript與jquery的區別 JavaScript是一門程式語言,用來編寫客戶端瀏覽器指令碼。 jQuery是javascript的一個庫,包含多個可重用的函式,用來輔助簡化javascript開發 jQuery能做的javascript都能做到,而JavaScript能做的事情,

Java基礎——靜態程式碼塊構造程式碼塊建構函式以及Java類初始化順序

閱讀目錄 建構函式 構造程式碼塊 靜態程式碼塊 Java類初始化順序 靜態程式碼塊:用staitc宣告,jvm載入類時執行,僅執行一次 構造程式碼塊:類中直接用{}定義,每一次建立物件時執行。 執行順序優先順序:靜態塊,main(),構造塊,構造方法。

關於sizeof函式memcpy函式以及結構體關於指標的問題彙總

1、sizeof()函式用於獲取變數、型別等位元組數。但是不能通過結構體指標獲取結構體的位元組數。使用會出現錯誤; 比如: typede struct { unsigned char yuliu[5]; unsigned char port; }_stru

05.Beetl標籤函式以及定界符佔位符介紹---《Beetl視訊課程》

本期視訊實現了部落格的詳情頁面; 內容簡介:使用了標籤函式layout完成詳情功能 一起學beetl目錄:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598 作者:GK #標籤函式 layout 所謂標籤函式,即

異常爬蟲demo find函式和findAll函式 以及正則表示式查詢元素

程式碼位於書的第1-2章 # from urllib.request import urlopen # from bs4 import BeautifulSoup # html = urlopen("http://pythonscraping.com/pages/page1

FIRST集合FOLLOW集合SELECT集合以及預測分析表地構造

FIRST集合、FOLLOW集合、SELECT集合以及預測分析表地構造 FIRST集合的簡單理解就是推匯出的字串的開頭終結符的集合。 FOLLOW集合簡單的理解就對於非終結符後面接的第一個終結符。   給定一個由終結符和非終結符組成的字串,FIRST( FIRST( FOLLOW(X

Machine Learning--week1 監督學習預測函式代價函式以及梯度下降演算法

Supervised Learning given labelled data to train and used to predict for regression problem and classification problem Unsupervised Le

三十一Linux 程序與訊號——SIGCHLD 訊號kill和raise函式以及alarm函式

31.1 SIGCHLD 訊號 子程序狀態發生變化(子程序結束)產生該訊號,父程序需要使用 wait 呼叫來等待子程序結束並回收它。 避免殭屍程序 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include

函式的返回值呼叫函式以及函式的引數

函式的返回值 1、什麼是返回值 返回值是一個函式的處理結果 2、為什麼要有返回值 如果我們需要在程式中拿到函式的處理結果做進一步的處理,則需要函式必須有返回值 3、函式的返回值的應用 函式的返回值用return去定義 格式為: return 值 注意: 1、return是一個函式結束的標誌,函式

Java提高篇——靜態程式碼塊構造程式碼塊建構函式以及Java類初始化順序

靜態程式碼塊:用staitc宣告,jvm載入類時執行,僅執行一次構造程式碼塊:類中直接用{}定義,每一次建立物件時執行。執行順序優先順序:靜態塊,main(),構造塊,構造方法。 建構函式 public HelloA(){//建構函式 } 關於建構函式,以下幾點

[收集]c++抽象類純虛擬函式以及巧用純虛解構函式實現介面類

在Java、C#中有關鍵詞abstract指明抽象函式、抽象類,但是在C++中沒有這個關鍵詞,很顯然,在C++也會需要只需要在基類宣告某函式的情況,而不需要寫具體的實現,那C++中是如何實現這一功能的,答案是純虛擬函式。 含有純虛擬函式的類是抽象類,不能生成物件,只能派生。

python——sorted函式sort函式以及operator.itemgetter的使用

sort()vs sorted(): sort()是Python列表的一個內建的排序方法,list.sort() 方法排序時直接修改原列表,返回None;sorted()是Python內建的一個排序

ioctl檔案操作介面函式以及nand的升級模式的操作過程詳解

概述 核心中驅動檔案的操作通常是通過write和read函式進行的,但是很多時候再使用者空間進行的操作或許不是核心中公共程式碼部分提供的功能,此時就需要使用一種個性化的方法進行操作--ioctl系統呼叫。 ioctl系統呼叫是一種用於裝置控制的公共介面,主要分為兩種,一種是

從0開始:getint()函式(類似於scanf函式)以及函式strncpystrncat及strncmp函式的實現

程式一:編寫getint(int *pn)函式 #include <stdio.h> #include <ctype.h> #define BUFSIZE 100 char buf[BUFSIZE]; /*用於ungetch函式的緩衝區*/