accept和select的區別

參考:https://blog.csdn.net/lsgqjh/article/details/65629609socket

select:查看指定fd_set中socket狀態,若是fd_set中有套接字準備就緒(觸發(讀、寫或執行)),則會返回,返回值爲觸發的套接字個數.net

accept:通過建立套接字socket()綁定bind()以及listen()以後,將監聽socket和客戶端socket創建一個全新鏈接,並返回client的socket信息;blog

判斷是否有客戶端發起連接請求,   通常用select(),而後accept()。資源

應該先select,能夠測一下超時。get

若是先accept,select就不必了。
還有select後,能夠測一下資源,若是fd用完了,能夠等歸還;直接的accept,發生這事這個鏈接就丟了。it

 

通常模型以下
初始化 (socket,bind,listen);
while(1)
{
  設置監聽讀寫文件描述符 (FD_SET*);
  調用 select;cli

  若是是傾聽套接字就緒 , 說明一個新的鏈接請求創建
  {
    創建鏈接 (accept);
    將accept返回的client fd加入到監聽文件描述符中去 ;
  }
  不然說明是一個已經鏈接過的描述符
  {
    進行操做 (read 或者 write);
  }
}select

相關文章
相關標籤/搜索