Подтвердить что ты не робот

Есть 0 или 1 допустимые значения возврата для вызова функции socket()

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

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

В соответствии с man-страницей у меня есть:

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

Согласно странице руководства, да, это возможно.