2011-10-03 73 views
5

我想在C語言中創建單線程服務器在Linux(紅色小屋),將聽多個套接字。錯誤接受:資源暫時不可用

我需要使用非阻塞套接字,當我設置標誌,以無阻塞這樣的:

int flagss = fcntl(socketfds[j],F_GETFL,0); 
flagss |= O_NONBLOCK; 
fcntl(socketfds[j],F_SETFL,flagss); 

我得到:

ERROR on accept: Resource temporarily unavailable 

否則,一切完美的作品。

回答

12

資源暫時不可用是EAGAIN,這不是一個真正的錯誤。這意味着「我現在沒有給你答案,你告訴我不要等,所以我在這裏沒有回答。」

如果你設置一個監聽套接字到非阻塞狀態,那麼當沒有客戶端嘗試連接時,accept應該將errno設置爲該值。您可以使用select(傳統)或poll(語義上相同,較新的接口,首選除非需要在某個舊的unix上運行,而不使用它)或epoll(針對數千個描述符,Linux特定的系統調用進行優化)等待傳入連接。

當然,您將使用poll(或任何其他選項)來等待偵聽套接字或任何數據套接字上的數據。

+1

謝謝,我用select和它的工作 – oznus

+1

感謝您對隱含意義的解釋! –

相關問題