參考:https://blog.csdn.net/lsgqjh/article/details/65629609
select:查看指定fd_set中socket狀態,如果fd_set中有套接字准備就緒(觸發(讀、寫或執行)),則會返回,返回值為觸發的套接字個數
accept:經過創建套接字socket()綁定bind()以及listen()之后,將監聽socket和客戶端socket建立一個全新連接,並返回client的socket信息;
判斷是否有客戶端發起鏈接請求, 一般用select(),然后accept()。
應該先select,可以測一下超時。
如果先accept,select就沒必要了。
還有select后,可以測一下資源,如果fd用完了,可以等歸還;直接的accept,發生這事這個連接就丟了。
一般模型如下
初始化 (socket,bind,listen);
while(1)
{
設置監聽讀寫文件描述符 (FD_SET*);
調用 select;
如果是傾聽套接字就緒 , 說明一個新的連接請求建立
{
建立連接 (accept);
將accept返回的client fd加入到監聽文件描述符中去 ;
}
否則說明是一個已經連接過的描述符
{
進行操作 (read 或者 write);
}
}