2010-02-04 114 views
16

在C中调用套接字函数时,是否返回0或1作为套接字描述符的值?对于socket()函数调用,返回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的套接字实现。

回答

15

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

1

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

3

当你的进程开始,0是标准输入,1表示标准输出,但你可以关闭它们,因此,如果您已关闭标准输入和标准输出,你可以得到这些FD回

4

0或1将精确地来描述。这可能会发生,因为错误地你可能会在初始化后将一个变量(最可能是存储套接字描述符的变量)传递给套接字关闭函数。由于该变量可能被初始化为0,所以可能会导致stdin被关闭。

3

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