Provided by: manpages-es_1.55-10_all bug

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)