В OSX я продолжаю получать сокетную ошибку 316 после вызова accept() на связанном соте &. Я получаю верный сокет, и я считаю, что я использую его в порядке (хотя, возможно, и не так, мне нужно дважды проверить это, поскольку я принимаю сотни соединений в любой момент), но errno был установлен.Что такое SOCKET accept() error errno 316?
Я пытаюсь понять the documentation on the unix accept(2) man pages, который отмечает (что, кстати, отсутствует в apple's accept() documentation)
Linux принимают() (и accept4()) проходит уже ожидающие сетевые ошибки на новом сокете как код ошибки от accept(). Такое поведение отличается от других реализаций сокетов BSD. Для надежной работы приложение должно обнаруживать сетевые ошибки, определенные для протокола после accept(), и обрабатывать их как EAGAIN путем повторной попытки.
сейчас, 316 работает как 256 OR'd with ETIMEDOUT (60). Итак, мне любопытно, как я должен справляться с этим;
- Если ANY error установлен после accept(), должен ли я снова принять()?
- Должен ли я закрыть() SOCKET, который принимает возврат DID?
- Являются ли unix кодом errno 8 бит? (все коды, которые я вижу, это < 128) и это ошибочный бит , установленный в памяти, или это специальный флаг, как предупреждение (я не могу найти документацию по формату errno)
- Имеет ли эта ошибка соединение, которое я только что выскочил из стека, приурочен ... сам и ОС отключили их, или не принимали() 'd мной достаточно быстро?
Как это «* ... продолжать получать ошибку сокета 316 после вызова accept() в подключенном и прослушивающем сокете. Я получаю верный сокет, возвращенный, *« работает? Вы просто хотите проверить 'errno', если' accept() 'return' -1', что, в свою очередь, не является допустимым дескриптором сокета. – alk
Это то, что я изначально думал, но цитируемые документы говорят, что «пропускает уже ожидающие сетевые ошибки в новом сокете». Новый сокет здесь означает ... мой существующий сокет? или новый сокет, который он генерирует? –
Хотя я только что нажал все ошибки, прежде чем вызывать 'accept()', и я чувствую, что это просто старый код ошибки после этого, поэтому я не проверяю ошибки после некоторого другого вызова ... –