Ресурс, временно недоступный - EAGAIN, и это не является ошибкой. Это означает: «У меня нет ответа для вас прямо сейчас, а вы сказали мне не ждать, поэтому я возвращаюсь без ответа».
Если вы устанавливаете прослушивающий сокет в неблокирующее состояние, как вы это делаете, accept
должен установить значение errno на это значение, когда нет клиентов, пытающихся подключиться. Вы можете ожидать входящее соединение, используя select
(традиционный) или poll
(семантически эквивалентный, более новый интерфейс, предпочтительный, если вам не нужно работать на каком-то старом Unix без него) или epoll
(оптимизированный для тысяч дескрипторов, Linux -специфичные) системные вызовы.
Конечно, вы будете использовать poll
(или любую другую альтернативу) для ожидания данных на слушающем сокете или любом из сокетов данных.