Linux C select伺服器原始碼剖析

2021-09-25 00:25:20 字數 837 閱讀 2345

直接看呼叫主函式中while迴圈的部分

每次呼叫select都會改變fd_set的值, 所以要兩個變數,allset,以及乙個rset

先看看是否有客戶端請求連線,如果有處理連線。

這裡用新開乙個陣列維護檔案描述符。這樣的好處是如果用動態陣列,可以動態維護檔案描述符。

遍歷整個客戶端的陣列,然後來看看有沒有可以讀的資訊

select函式的缺點是每次要將fd_set拷貝到核心區,是基於輪詢機制的io多路復用。

while (1) 

if (i == fd_setsize)

fd_set(connfd, &allset); /* 向監控檔案描述符集合allset新增新的檔案描述符connfd */

if (connfd > maxfd)

maxfd = connfd; /* select第乙個引數需要 */

if (i > maxi)

maxi = i; /* 保證maxi存的總是client最後乙個元素下標 */

if (--nready == 0)

continue;

} for (i = 0; i <= maxi; i++) else if (n > 0)

if (--nready == 0)

break; /* 跳出for, 但還在while中 */}}

}

linux c select 伺服器原始碼 簡介

直接看呼叫主函式中while迴圈的部分 每次呼叫select都會改變fd set的值,所以要兩個變數,allset,以及乙個rset 先看看是否有客戶端請求連線,如果有處理連線。這裡用新開乙個陣列維護檔案描述符。這樣的好處是如果用動態陣列,可以動態維護檔案描述符。遍歷整個客戶端的陣列,然後來看看有沒...

伺服器安裝Linux伺服器

新辦公需要搭建一台伺服器,之前也沒有怎麼搞過,不過有一些了解,於是和同事一起嘗試安裝一下伺服器。本人使用ultraiso燒錄u盤,系統檔案是centos 6.6 x86 64 bin 1.ios,使用urtraiso開啟iso檔案,然後如下圖 接著就可以寫入,u盤會被格式化的,注意備份,等待寫入就可...

mysql udp伺服器 UDP伺服器

傳輸層主要應用的協議模型有兩種,一種是tcp協議,另外一種則是udp協議。tcp協議在網路通訊中佔主導地位,絕大多數的網路通訊借助tcp協議完成資料傳輸。但udp也是網路通訊中不可或缺的重要通訊手段。相較於tcp而言,udp通訊的形式更像是發簡訊。不需要在資料傳輸之前建立 維護連線。只專心獲取資料就...