Provided by:
manpages-es_1.55-10_all 
NOMBRE
socket - Interfaz de conectores (sockets) de Linux
SINOPSIS
#include <sys/socket.h>
mysocket = socket(int socket_family, int socket_type, int protocol);
DESCRIPCI'ON
Esta pagina de manual describe la interfaz de usuario de la capa de
conectores de red de Linux. Los conectores compatibles con BSD son la
interfaz uniforme entre el proceso de usuario y las pilas de protocolos
de red dentro del nucleo. Los modulos de protocolo se agrupan en
familias de protocolos como PF_INET, PF_IPX y PF_PACKET, y tipos de
conectores como SOCK_STREAM o SOCK_DGRAM. Vea socket(2) para obtener
mas informacion sobre las familias y los tipos.
FUNCIONES DE LA CAPA DE CONECTORES
Estas funciones las usa el proceso de usuario para enviar o recibir
paquetes y para realizar otras operaciones con conectores. Para mas
informacion vea sus paginas de manual respectivas.
socket(2) crea un conector, connect(2) conecta un conector a una
direccion de conector remota, la funcion bind(2) enlaza un conector a
una direccion de conector local, listen(2) indica al conector que se
aceptaran nuevas conexiones y accept(2) se usa para obtener un nuevo
conector con una nueva conexion de entrada. socketpair(2) devuelve dos
conectores anonimos conectados (solo implementado para unas pocas
familias locales como PF_UNIX)
send(2), sendto(2) y sendmsg(2) envian datos a traves de un conector y
recv(2), recvfrom(2) y recvmsg(2) reciben datos de un conector.
poll(2) y select(2) esperan la llegada de datos o la posibilidad de
enviar datos. Ademas, se pueden usar las operaciones estandares de E/S
como write(2), writev(2), sendfile(2), read(2) y readv(2) para leer y
escribir datos.
getsockname(2) devuelve la direccion de un conector local y
getpeername(2) devuelve la direccion de un conector remoto.
getsockopt(2) y setsockopt(2) se usan para configurar o consultar
opciones de los protocolos o las capas. ioctl(2) se puede usar para
configurar o consultar otras opciones determinadas.
close(2) se usa para cerrar un conector. shutdown(2) cierra partes de
una conexion bidireccional entre conectores.
Las busquedas o las llamadas a pread(2) o pwrite(2) con una posicion
distinta de cero, no estan soportadas en conectores.
Es posible realizar E/S no bloqueante con conectores activando la
opcion O_NONBLOCK sobre el descriptor de fichero de un conector usando
fcntl(2). A continuacion, todas las operaciones que normalmente se
bloquearian devolveran (usualmente) el error EAGAIN . (la operacion
debera ser reintentada mas tarde); connect(2) devolvera un error
EINPROGRESS. Mas tarde, el usuario puede esperar diferentes eventos
mediante poll(2) o select(2).
+---------------------------------------------------------+
| Eventos de E/S |
+------------------+----------------+---------------------+
|Evento | Opcion de poll | Ocurrencia |
+------------------+----------------+---------------------+
|Lectura | POLLIN | Han llegado nuevos |
| | | datos. |
+------------------+----------------+---------------------+
|Lectura | POLLIN | Se ha completado |
| | | una nueva solicitud |
| | | de conexion (para |
| | | conectores |
| | | orientados a |
| | | conexion). |
+------------------+----------------+---------------------+
|Lectura | POLLHUP | El otro extremo ha |
| | | iniciado una |
| | | solicitud de |
| | | desconexion. |
+------------------+----------------+---------------------+
|Lectura | POLLHUP | Se ha roto una |
| | | conexion (solo para |
| | | protocolos |
| | | orientados a |
| | | conexion). Cuando |
| | | se escribe en el |
| | | conector, tambien |
| | | se envia la senal |
| | | SIGPIPE. |
+------------------+----------------+---------------------+
|Escritura | POLLOUT | El conector tiene |
| | | suficente espacio |
| | | en el buffer de |
| | | envio para escribir |
| | | nuevos datos. |
+------------------+----------------+---------------------+
|Lectura/Escritura | POLLIN| | Ha finalizado un |
| | POLLOUT | connect(2) de |
| | | salida. |
+------------------+----------------+---------------------+
|Lectura/Escritura | POLLERR | Se ha producido un |
| | | error asincrono. |
+------------------+----------------+---------------------+
|Lectura/Escritura | POLLHUP | El otro extremo ha |
| | | cerrado una |
| | | direccion de la |
| | | conexion. |
+------------------+----------------+---------------------+
|Excepcion | POLLPRI | Han llegado datos |
| | | fuera de orden, lo |
| | | que hace que se |
| | | envie la senal |
| | | SIGURG. |
+------------------+----------------+---------------------+
Una alternativa a poll/select es dejar que el nucleo informe de los
eventos a la aplicacion mediante una senal SIGIO. Para ello, se debe
activar la opcion FASYNC en el descriptor de fichero de un conector
mediante fcntl(2) y se debe instalar un manejador de senales valido
para SIGIO mediante sigaction(2). Vea la discusion sobre SE~NALES mas
abajo.
OPCIONES DE LOS CONECTORES
Estas opciones de conector se pueden configurar usando setsockopt(2) y
consultar con getsockopt(2) con el nivel de conectores fijado a
SOL_SOCKET para todos los conectores:
SO_KEEPALIVE
Habilita el envio de mensajes "sigue vivo" (keep-alive) en
conectores orientados a conexion. Espera una opcion booleana
entera.
SO_OOBINLINE
Si se habilita esta opcion, los datos fuera de orden se colocan
directamente en el flujo de recepcion de datos. En otro caso,
los datos fuera de orden solo se pasan cuando se activa la
opcion MSG_OOB durante la recepcion.
SO_RCVLOWAT y SO_SNDLOWAT
Especifican el numero minimo de bytes en el buffer para que la
capa de conectores pase los datos al protocolo (SO_SNDLOWAT) o
al usuario durante la recepcion (SO_RCVLOWAT). Estos dos
valores no se pueden cambiar en Linux y sus argumentos de tamano
siempre tienen el valor de 1 byte. getsockopt es capaz de
leerlos. setsockopt siempre devolvera ENOPROTOOPT.
SO_RCVTIMEO y SO_SNDTIMEO
Especifica los plazos de tiempo (timeouts) para enviar y recibir
antes de informar de un error. En Linux el valor de ambos es
fijo y viene dado por una configuracion especifica del protocolo
y no se pueden ni leer ni modificar. Su funcionalidad se puede
emular usando alarm(2) o setitimer(2).
SO_BSDCOMPAT
Habilita la compatibilidad fallo a fallo con BSD. Esto lo usa
solo el modulo del protocolo UDP y esta previsto que se elimine
en el futuro. Cuando esta activa, los errores ICMP recibidos por
un conector UDP no se pasan al programa de usuario. Linux 2.0
tambien habilitaba las opciones de compatibilidad fallo a fallo
con BSD (cambio aleatorio de las cabeceras, omision de la opcion
de difusion) para los conectores directos con esta opcion, pero
esto se ha eliminado en la version 2.2 de Linux. Es mejor
corregir los programas de usuario que habilitar esta opcion.
SO_PASSCRED
Habilita o deshabilita la recepcion del mensaje de control
SCM_CREDENTIALS. Para mas informacion, vea unix(7).
SO_PEERCRED
Devuelve las credenciales del proceso externo conectado a este
conector. Solo util para conectores PF_UNIX. Vea unix(7). El
argumento es una estructura ucred. Esta opcion solo es valida
para getsockopt.
SO_BINDTODEVICE
Enlaza este conector a un dispositivo particular, como "eth0",
especificado en el nombre de inferfaz pasado. Si el nombre es
una cadena vacia o la longitud de las opciones es cero, se
elimina el enlace entre el dispositivo y el conector. La opcion
pasada es una cadena (terminada en \0) de longitud variable con
el nombre de la interfaz, con un tamano maximo de IFNAMSIZ. Si
el conector esta ligado a una interfaz, este solo procesara los
paquetes recibidos desde la interfaz particular. Observe que
esto solo funciona para algunos tipos de conector,
particularmente para conectores de tipo AF_INET bind(8) con
ellos).
SO_DEBUG
Activa la depuracion de los conectores. Solo permitida para los
procesos con la capacidad CAP_NET_ADMIN o un identificador de
usuario efectivo 0.
SO_REUSEADDR
Indica que las reglas usadas para validar las direcciones
proporcionadas en una llamada bind(2) deben permitir la
reutilizacion de las direcciones locales. Para los conectores
PF_INET esto significa que un conector se puede enlazar a una
direccion, excepto cuando hay un conector activo escuchando
asociado a la direccion. Cuando el conector que esta escuchando
esta asociado a INADDR_ANY con un puerto especifico, entonces no
es posible realizar enlaces a este puerto para ninguna direccion
local.
SO_TYPE
Obtiene el tipo de conector como un valor entero (como
SOCK_STREAM). Solo puede ser leido con getsockopt.
SO_ACCEPTCONN
Devuelve un valor indicando si el conector ha sido marcado o no
para aceptar conexiones con listen(). El valor 0 indica que es
un conector que no escucha peticiones, el valor 1 indica que es
un conector que escucha peticiones. Solo puede ser leido con
getsockopt.
SO_DONTROUTE
No enviar a traves de un enrutador, solo enviar a ordenadores
directamente conectados. Se puede conseguir el mismo efecto
activando la opcion MSG_DONTROUTE en una operacion send(2) sobre
un conector. Espera una opcion booleana entera.
SO_BROADCAST
Establece o consulta la opcion de difusion. Cuando esta activa,
los conectores de datagramas reciben los paquetes enviados a una
direccion de difusion y se les permite enviar paquetes a una
direccion de difusion. Esta opcion no tiene efecto en conectores
orientados a conexion.
SO_SNDBUF
Establece u obtiene, en bytes, el maximo buffer de envio de un
conector. El valor por defecto se configura con la sysctl
wmem_default y el maximo valor permitido se establece con la
sysctl wmem_max.
SO_RCVBUF
Establece u obtiene, en bytes, el maximo buffer de recepcion de
un conector. El valor por defecto se configura con la sysctl
rmem_default y el maximo valor permitido se establece con la
sysctl rmem_max.
SO_LINGER
Establece u obtiene la opcion SO_LINGER. El argumento es una
estructura linger.
struct linger {
int l_onoff; /* activar/desactivar demora */
int l_linger; /* segundos de demora */
};
Cuando esta opcion esta activa, un close(2) o shutdown(2) no
regresaran hasta que todos los mensajes encolados para el
conector hayan sido enviados con exito o se haya alcanzado el
plazo de tiempo de demora. En otro caso, la llamada regresa
inmediatamente y el cierre se realiza en segundo plano. Cuando
el conector se cierra como parte de una llamada exit(2), siempre
se demora en segundo plano.
SO_PRIORITY
Asigna a todos los paquetes a enviar a traves de este conector
la prioridad definida por el protocolo. Linux usa este valor
para ordenar las colas de red: los paquetes con una prioridad
mayor se pueden procesar primero dependiendo de la disciplina de
encolamiento del dispositivo seleccionado. Para ip(7), esto
tambien establece el campo "tipo de servicio IP" (TOS) para los
paquetes de salida.
SO_ERROR
Obtiene y borra el error de conector pendiente. Solo valida para
getsockopt. Espera un entero.
SE~NALES
Cuando se escribe en un conector orientado a conexion que ha sido
cerrado (por el extremo local o remoto) se envia una senal SIGPIPE al
proceso escritor y se devuelve el valor de error EPIPE. No se envia la
senal cuando la llamada para escritura especifica la opcion
MSG_NOSIGNAL.
Cuando se solicita con la fcntl FIOSETOWN o la ioctl SIOCSPGRP, la
senal SIGIO se envia cuando se produce un evento de E/S. Es posible
usar poll(2) o select(2) en el manejador de la senal para averigurar
sobre que conector se produjo el evento. Una alternativa (en Linux 2.2)
es configurar una senal de tiempo real usando la fcntl F_SETSIG. Se
llamara al manejador de la senal de tiempo real con el descriptor de
fichero en el campo si_fd de su estructura siginfo_t. Vea fcntl(2)
para mas informacion.
Bajo determinadas circunstancias (por ejemplo, varios procesos
accediendo a un unico conector), la condicion que ha provocado la senal
SIGIO puede haber desaparecido ya cuando el proceso reaccione a la
senal. Si esto ocurre, el proceso deberia esperar de nuevo ya que Linux
reenviara la senal SIGIO mas tarde.
SYSCTLS
Se puede acceder a las sysctls fundamentales de red de los conectores
usando los ficheros /proc/sys/net/core/* o mediante la interfaz
sysctl(2).
rmem_default
contiene el valor por defecto, en bytes, del buffer de recepcion
de un conector.
rmem_max
contiene el tamano maximo, en bytes, del buffer de recepcion de
un conector que el usuario puede establecer usando la opcion de
conector SO_RCVBUF.
wmem_default
contiene el valor por defecto, en bytes, del buffer de envio de
un conector.
wmem_max
contiene el tamano maximo, en bytes, del buffer de envio de un
conector que un usuario puede configurar usando la opcion de
conector SO_SNDBUF.
message_cost y message_burst
configuran el filtro de cubetas de fichas usado to load limit
warning messages provocados por eventos de red externos.
netdev_max_backlog
Numero maximo de paquetes en la cola de entrada global.
optmem_max
Longitud maxima de los datos auxiliares y de los datos de
control del usuario, como los iovecs por conector.
IOCTLS
Se puede acceder a estas ioctls usando ioctl(2):
error = ioctl(ip_socket, ioctl_type, &value_result);
SIOCGSTAMP
Devuelve una struct timeval con la marca de tiempo recibida del
ultimo paquete pasado al usuario. Esto es util para realizar
medidas exacta del tiempo de ida y vuelta o tiempo de viaje. Vea
setitimer(2) para una descripcion de struct timeval.
SIOCSPGRP
Configura el proceso o grupo de procesos al que enviar la senal
SIGIO o SIGURG cuando termina una operacion de E/S asincrona o
hay disponibles datos urgentes. El argumento es un puntero a un
pid_t. Si el argumento es positivo, las senales se envian a ese
proceso. Si es negativo, las senales se envian al grupo de
procesos cuyo identificador es el valor absoluto del argumento.
El proceso solo puede seleccionar a el mismo o a su propio grupo
de procesos para que reciban las senales, a menos que posea la
capacidad CAP_KILL o un identificador de usuario efectivo 0.
FIOASYNC
Modifica la opcion O_ASYNC para habilitar o deshabilitar el modo
de E/S asincrona del conector. El modo de E/S asincrona
significa que se producira una senal SIGIO, o la senal
establecida mediante F_SETSIG, cuando se produzca un nuevo
evento de E/S.
El argumento es una opcion booleana entera.
SIOCGPGRP
Obtiene el proceso o grupo de procesos actual que recibe las
senal SIGIO o SIGURG, o 0 cuando no hay ninguno.
Fcntls validas:
FIOGETOWN
Identica a la ioctl SIOCGPGRP.
FIOSETOWN
Identica a la ioctl SIOCSPGRP.
OBSERVACIONES
Linux asume que se usa la mitad del buffer de envio/recepcion para
estructuras internas del nucleo. Por tanto, las sysctls son el doble de
lo que se puede observar en ultima instancia.
FALLOS
No se han documentado las opciones de conector SO_ATTACH_FILTER y
SO_DETACH_FILTER de CONFIG_FILTER. La interfaz sugerida para usarlas
es la biblioteca libpcap.
VERSIONES
SO_BINDTODEVICE se introdujo en la version 2.0.30 de Linux.
SO_PASSCRED es nueva en la version 2.2 del nucleo. Las sysctls son
nuevas en Linux 2.2.
AUTORES
Esta pagina de manual fue escrita por Andi Kleen.
V'EASE TAMBI'EN
socket(2), ip(7), setsockopt(2), getsockopt(2), packet(7), ddp(7)
Pagina man de Linux 7 mayo 1999 SOCKET(7)