2010-02-04 112 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的負值。