select主要用於檢測多個fd狀態,可檢測fd大小收核心編譯巨集__fd_setsize限制,預設為1024。
當開啟的fd較多時,select的效率會降低。可修改下面簡單伺服器模型為僅接受連線,當fd數量超過20000時,select返回明顯變慢。
void testselectsocket()
else if(nret > 0)
else
else}}
}} else
}}
int read(int fd, char * pbuffer, unsigned int nbufferlend, unsigned int nmillisecondtimeout)
else if(nret > 0)
else if(nret == 0)
break;
nreadlen += nret;
ptr += nret;
} else
}return nreadlen;
}
select I O多路復用
使用select函式的套接字 如果你想保持現有連線的同時,偵聽新的連線,怎麼辦呢?普通的做法 使用recv,accept是做不到的 當使用accetp等待新的連線時,程式是阻塞的,也就沒辦法再同原有連線保持通訊。另一種做法是,使用非阻塞方式,但這會浪費了寶貴的cpu時間 你的不停的輪詢輪詢 有沒有更...
Linux IO多路復用
一.select 函式 include include include int select int n,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeout fd clr int fd,fd set set f...
I O多路復用
一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...