socket()函数调用的有效返回值是0还是1

时间:2010-02-04 17:24:00

标签: c unix sockets

套接字函数中的套接字函数调用可以返回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.

似乎可以,或者至少man手册没有提到任何保留值。是否在其他地方写入了有效的套接字描述符需要为2或更大?

我专门在linux 2.4.22内核上运行,但我很想知道任何基于unix的socket实现。

5 个答案:

答案 0 :(得分:17)

0和1都是有效的返回值,如果应用程序已关闭其标准输入或输出文件描述符,则可能确实返回。

答案 1 :(得分:4)

当你的过程开始时,0是stdin,1是stdout,但是你可以关闭它们,因此,你可以让这些FD回来

答案 2 :(得分:4)

如果你关闭了stdin或stdout描述符,那么

0或1将会精确到来。这可能会发生,因为在初始化之后,您可能会将一个变量(很可能是存储套接字描述符的变量)传递给套接字关闭函数。由于变量可能初始化为0,因此可能会导致stdin关闭。

答案 3 :(得分:3)

唯一不是有效文件描述符的值是小于0的值。-1表示错误,并且将设置errno。你不应该看到不是-1的负值。

答案 4 :(得分:1)

根据手册页,是的,它可以。