0 или 1 допустимые возвращаемые значения для вызова функции socket () - PullRequest
16 голосов
/ 04 февраля 2010

Может ли вызов функции сокета в C вернуть 0 или 1 в качестве значения для дескриптора сокета?

   int socket(int domain, int type, int protocol);

Согласно справочной странице у меня:

RETURN VALUE
   -1 is returned if an error occurs; otherwise the  return  value  is  a
   descriptor referencing the socket.

Кажется, что это возможно, или, по крайней мере, на странице руководства не упоминаются какие-либо зарезервированные значения. Написано ли где-то еще, что допустимые дескрипторы сокетов должны быть 2 или больше?

Я специально работаю на ядре Linux 2.4.22, но мне любопытно узнать о любой реализации сокета на основе Unix.

Ответы [ 5 ]

17 голосов
/ 04 февраля 2010

И 0, и 1 являются действительными возвращаемыми значениями и могут действительно быть возвращены, если приложение закрыло свои стандартные дескрипторы входных или выходных файлов.

4 голосов
/ 04 февраля 2010

0 или 1 точно придет, если вы закрыли дескрипторы stdin или stdout. Это может произойти, потому что по ошибке вы можете передать переменную (скорее всего ту, в которой вы храните свой дескриптор сокета) в функцию закрытия сокета после инициализации. Поскольку переменная может быть инициализирована в 0, это может привести к закрытию stdin.

4 голосов
/ 04 февраля 2010

Когда ваш процесс начинается, 0 - это стандартный ввод, а 1 - стандартный вывод, но вы можете закрыть их, и, следовательно, вы можете получить эти FD обратно

3 голосов
/ 04 февраля 2010

Единственными значениями, которые не являются допустимыми дескрипторами файла, являются значения, которые меньше 0. -1 будет означать ошибку, и будет установлено значение errno. Вы никогда не должны видеть отрицательное значение, которое не -1. ​​

1 голос
/ 04 февраля 2010

Согласно справочной странице, да, может.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...