2010-02-04 36 views
16

¿Podría la función de socket llamar a C devolver 0 o 1 como valor para el descriptor de socket?¿Hay 0 o 1 valores de retorno válidos para la llamada a la función socket()?

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

De acuerdo con la página del manual que tengo:

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

Parece que podría, o al menos la página del manual no hace mención de ningún valores reservados. ¿Está escrito en otro lugar que los descriptores de socket válidos deben ser 2 o mayores?

Estoy ejecutando específicamente en un núcleo de Linux 2.4.22, pero tengo curiosidad por saber si hay una implementación del socket basada en Unix.

Respuesta

15

Tanto el 0 como el 1 son valles de devolución válidos, y de hecho pueden devolverse si la aplicación ha cerrado sus descriptores de archivos de entrada o salida estándar.

1

De acuerdo con la página del manual, sí, podría.

3

Cuando se inicia el proceso, 0 es la entrada estándar y 1 es la salida estándar, pero se puede cerrarlas, y por lo tanto, se puede obtener estos FD volver

4

0 o 1 vendrán precisamente si ha cerrado la entrada estándar o la salida estándar descriptores. Esto podría estar sucediendo, porque por error podría estar pasando una variable (muy probablemente la que almacena su descriptor de socket) a la función de cierre de socket después de la inicialización. Dado que la variable puede inicializarse a 0, podría provocar el cierre de stdin.

3

Los únicos valores que no son descriptores de archivos válidos son aquellos menores que 0. -1 indicará un error y se establecerá errno. Nunca deberías ver un valor negativo que no sea -1.

Cuestiones relacionadas