|
|||||||
|
|
CMSGSection: Manual del Programador de Linux (3)Updated: 2 octubre 1998 IndexReturn to Main Contents NOMBRECMSG_ALIGN, CMSG_SPACE, CMSG_NXTHDR, CMSG_FIRSTHDR - Acceso a datos auxiliares.SINOPSIS#include <sys/socket.h>struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh); struct cmsghdr { socklen_t cmsg_len; /* cantidad de bytes de datos, incluyendo la cabecera */ int cmsg_level; /* protocolo originario */ int cmsg_type; /* tipo específico del protocolo */ /* seguido de unsigned char cmsg_data[]; */}; DESCRIPCIÓNEstas macros se usan para crear y acceder a mensajes de control (tambiénllamados datos auxiliares) que no son parte del contenido útil de unconector.Esta información de control puede incluir la interfaz en la que se harecibido el paquete, diferentes campos de cabecera usados raramente, unadescripción de error ampliada, un conjunto de descriptores de fichero ocredenciales de Unix. Por ejemplo, los mensajes de control se pueden usarpara enviar campos de cabecera adicionales tales como opciones IP.Los datos auxiliares se envían llamando asendmsg(2)y se reciben llamando arecvmsg(2).Vea sus páginas de manual para más información.Los datos auxiliares son una secuencia de estructurasstruct cmsghdrcon datos añadidos. Sólo se debería acceder a esta secuencia usando lasmacros descritas en esta página de manual y nunca directamente.Vea las páginas de manual específicas del protocolo para conocer los tiposde mensajes de control disponibles.El tamaño máximo permitido del buffer auxiliar por conector se puedeconfigura con la sysctlnet.core.optmem_max.Veasocket(7). CMSG_FIRSTHDR devuelve un puntero a la primeracmsghdr en el buffer de datos auxiliares asociado con lamsghdrpasada. CMSG_NXTHDR devuelve la siguientecmsghdr válida después de lacmsghdrpasada. DevuelveNULL cuando no queda suficiente espacio en el buffer.when there isn't enough space left in the buffer. CMSG_ALIGN,dada una longitud, la devuelve incluyendo la alineación necesaria. Ésta esuna expresión constante. CMSG_SPACEdevuelve la cantidad de bytes que ocupa un elemento auxiliar cuyo contenido útil es de la longitud de datos pasada. Ésta es una expresiónconstante. CMSG_DATAdevuelve un puntero a la porción de datos de unacmsghdr. CMSG_LENdevuelve el valor a almacenar en el miembrocmsg_lende la estructuracmsghdr teniendo en cuenta cualquier alineación necesaria. Toma como argumento lalongitud de los datos. Ésta es una expresión constante. Para crear datos auxiliares, inicialice primero el miembromsg_controllende la estructuramsghdr con el tamaño del buffer de mensajes de control. UseCMSG_FIRSTHDR sobremsghdr para obtener el primer mensaje de control yCMSG_NEXTHDRpara obtener los siguientes.En cada mensaje de control, inicialicecmsg_len(con CMSG_LEN),los otros campos cabecera decmsghdr y la parte de datos usandoCMSG_DATA.Finalmente, debería asignar al campomsg_controllen de msghdr la suma de losCMSG_SPACE de las longitudes de todos los mensajes de control del buffer.Para más información sobremsghdr,vearecvmsg(2). Cuando el buffer de mensajes de control es demasiado pequeño para almacenartodos los mensajes, se activa la banderaMSG_CTRUNC en el miembromsg_flags demsghdr. EJEMPLOEste código busca la opciónIP_TTL en un buffer auxiliar recibido:
El siguiente código pasa un vector de descriptores de ficheros mediante unconector Unix usandoSCM_RIGHTS:
NOTASPara transportabilidad, sólo se debería acceder a los datos auxiliaresusando las macros descritas aquí.CMSG_ALIGNes una extensión de Linux y no debería usarse en programas transportables.En Linux,CMSG_LEN,CMSG_DATAyCMSG_ALIGNson expresiones constantes (suponiendo que su argumento sea contante). Estose podría usar para declarar el tamaño de variables globales pero, sin embargo,podría no ser transportable. CONFORME AEl modelo de datos auxiliares sigue el borrador POSIX.1003.1g, 4.4BSD-Lite,la API avanzada de IPv6 descrita en RFC2292 y the Single Unix specification v2.CMSG_ALIGN es una extensión de Linux.VÉASE TAMBIÉNsendmsg(2), recvmsg(2)RFC 2292 Index | ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "Linuxinfor Man Pages in HTML Format: man3". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |