Opciones de socket IPPROTO_IPV6

En las tablas siguientes se describen las opciones de socket IPPROTO_IPV6 que se aplican a los sockets creados para la familia de direcciones IPv6 (AF_INET6). Consulte las páginas de referencia de las funciones getsockopt y setsockopt para obtener más información sobre cómo obtener y ajustar opciones de socket.

Para enumerar protocolos y detectar las propiedades admitidas en cada protocolo instalado, use la función WSAEnumProtocols, WSCEnumProtocols o WSCEnumProtocols32.

Algunas opciones de socket se deben explicar mejor que lo que se indica en estas tablas; estas opciones incluyen vínculos a otra información de interés.

Opciones

Opción get set Tipo optval Descripción
IP_ORIGINAL_ARRIVAL_IF DWORD (booleano) Indica si la función LPFN_WSARECVMSG (WSARecvMsg) debe devolver datos de control opcionales que incluyan la interfaz de llegada original donde se recibió el paquete para los sockets de datagramas. Esta opción se usa con tecnologías de transición de IPv6 (por ejemplo, 6to4, ISATAP y túneles Teredo) que incluyen la asignación de direcciones y la tunelización automática de host a host para el tráfico IPv6 de unidifusión cuando los hosts IPv6 deben atravesar redes IP4 para llegar a otras redes IPv6. Los paquetes IPv6 se envían mediante túneles como paquetes IPv4. Esta opción permite que la interfaz IPv4 original donde se haya recibido el paquete se devuelva en la estructura WSAMSG.
IPV6_ADD_IFLIST DWORD (IF_INDEX) Agrega un índice de interfaz al IFLIST asociado a la opción IP_IFLIST.
IPV6_ADD_MEMBERSHIP ipv6_mreq Une el socket al grupo de multidifusión proporcionado en la interfaz correspondiente. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_DEL_IFLIST DWORD (IF_INDEX) Elimina un índice de interfaz del IFLIST asociado a la opción IP_IFLIST. Las entradas solo se pueden quitar mediante la aplicación, por lo que debe tener en cuenta que las entradas pueden quedar obsoletas una vez que se quita una interfaz.
IPV6_DROP_MEMBERSHIP ipv6_mreq Abandona el grupo de multidifusión proporcionado en la interfaz correspondiente. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_GET_IFLIST DWORD[] (IF_INDEX[]) Obtiene el IFLIST actual asociado a la opción IP_IFLIST. Devuelve el error si IP_IFLIST no está habilitado.
IPV6_HDRINCL DWORD (booleano) Indica que la aplicación incluye el encabezado IPv6 en todos los datos salientes. Si el parámetro optval tiene el valor 1 en la llamada en setsockopt, la opción estará habilitada. Si optval tiene el valor 0, la opción estará deshabilitada. El valor predeterminado está deshabilitado. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW). Un proveedor de servicios TCP/IP que admita SOCK_RAW también debe admitir IPV6_HDRINCL.
IPV6_HOPLIMIT DWORD (booleano) Indica que se debe devolver información del salto (TTL) en la función LPFN_WSARECVMSG (WSARecvMsg). Si optval tiene el valor 1 en la llamada en setsockopt, la opción estará habilitada. Si tiene el valor 0, la opción estará deshabilitada. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_IFLIST DWORD (booleano) Obtiene o crea el estado IP_IFLIST del socket. Cuando esta opción tiene el valor true, la recepción de datagramas está restringida a interfaces que se encuentren en IFLIST. Se omitirán los datagramas recibidos en cualquier otra interfaz. IFLIST se inicia vacío. Use IP_ADD_IFLIST y IP_DEL_IFLIST para editar IFLIST.
IPV6_JOIN_GROUP ipv6_mreq Igual que IPV6_ADD_MEMBERSHIP
IPV6_LEAVE_GROUP ipv6_mreq Igual que IPV6_DROP_MEMBERSHIP
IPV6_MTU DWORD Obtiene el cálculo de la MTU de la ruta del sistema. El socket debe estar conectado.
IPV6_MTU_DISCOVER DWORD (PMTUD_STATE) Obtiene o crea el estado de detección de la MTU de la ruta para el socket. El valor predeterminado es IP_PMTUDISC_NOT_SET. En el caso de los sockets de flujo, IP_PMTUDISC_NOT_SET y IP_PMTUDISC_DO realizarán la detección de la MTU de la ruta. IP_PMTUDISC_DONT y IP_PMTUDISC_PROBE desactivarán la detección de la MTU de la ruta. En el caso de los sockets de datagramas, si se cambia a IP_PMTUDISC_DO, al intentar enviar paquetes mayores que la MTU de la ruta, se producirá un error. Si se cambia a IP_PMTUDISC_DONT, los paquetes se fragmentarán según la MTU de la interfaz. Si se cambia a IP_PMTUDISC_PROBE, al intentar enviar paquetes mayores que la MTU de la interfaz, se producirá un error.
IPV6_MULTICAST_HOPS DWORD Obtiene o crea el valor de TTL asociado al tráfico de multidifusión IPv6 en el socket. No es posible crear el TTL con un valor mayor que 255. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_MULTICAST_IF DWORD Obtiene o crea la interfaz saliente para enviar tráfico de multidifusión IPv6. Esta opción no cambia la interfaz predeterminada para recibir tráfico de multidifusión IPv6. Esta opción es importante para equipos de host múltiple. El valor de entrada para crear esta opción es un índice de interfaz de 4 bytes de la interfaz saliente deseada en el orden de bytes del host. La función GetAdaptersAddresses se puede usar para obtener la información del índice de interfaz. Si optval tiene el valor NULL en la llamada a setsockopt, se usará la interfaz de IPv6 predeterminada. Si optval tiene el valor cero, se indicará la interfaz predeterminada para recibir la multidifusión con el fin de enviar tráfico de multidifusión. Al obtener esta opción, optval devolverá el índice de interfaz predeterminado actual para enviar tráfico IPv6 de multidifusión en el orden de bytes del host.
IPV6_MULTICAST_LOOP DWORD (booleano) Indica que los datos de multidifusión enviados en el socket se devolverán al búfer de recepción de sockets si también se unen en el grupo de multidifusión de destino. Si optval tiene el valor 1 en la llamada en setsockopt, la opción estará habilitada. Si tiene el valor 0, la opción estará deshabilitada. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_PKTINFO DWORD (booleano) Indica que la función LPFN_WSARECVMSG (WSARecvMsg) debe devolver la información de los paquetes.
IPV6_PROTECTION_LEVEL INT Permite restringir un socket al ámbito especificado, como direcciones con el mismo prefijo local de vínculo o sitio. Ofrece varios niveles de restricción y una configuración predeterminada. Consulte IPV6_PROTECTION_LEVEL para obtener más detalles.
IPV6_RECVIF DWORD (booleano) Indica si la pila IP debe rellenar el búfer de control con los detalles sobre qué interfaz ha recibido un paquete con un socket de datagramas. Cuando este valor es true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá los datos de control opcionales que incluye la interfaz donde se recibió el paquete para los sockets de datagramas. Esta opción permite que la interfaz IPv6 donde se haya recibido el paquete se devuelva en la estructura WSAMSG. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_RECVTCLASS DWORD (booleano) Indica si la pila IP debe rellenar el búfer de control con un mensaje que incluya el campo de encabezado Clase de tráfico de IPv6 en un datagrama recibido. Cuando el valor sea true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá los datos de control opcionales que incluyan el valor del campo de encabezado Clase de tráfico de IPv6 del datagrama recibido. Esta opción permite devolver el campo de encabezado Clase de tráfico de IPv6 del datagrama recibido en la estructura WSAMSG. El tipo de mensaje devuelto será IPV6_TCLASS. Se devolverán todos los bits DSCP y ECN del campo Clase de tráfico. Esta opción solo es válida en sockets de datagramas (el tipo de socket debe ser SOCK_DGRAM).
IPV6_RECVECN DWORD (booleano) Indica si la pila IP debe rellenar el búfer de control con un mensaje que incluya los bits ECN del campo de encabezado Clase de tráfico de IPv6 en un datagrama recibido. Cuando el valor sea true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá los datos de control opcionales que incluyan los bits ECN del valor del campo de encabezado Clase de tráfico de IPv6 del datagrama recibido. Esta opción permite devolver los bits ECN del campo de encabezado Clase de tráfico de IPv6 del datagrama recibido en la estructura WSAMSG. El tipo de mensaje devuelto será IPV6_ECN. Se devolverán todos los 2 bits ECN del campo Clase de tráfico. Esta opción solo es válida en datagramas y sockets sin formato (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW). Para la seguridad de los tipos, debe usar las funciones WSAGetRecvIPEcn y WSASetRecvIPEcn en lugar de usar directamente la opción de socket.
IPV6_UNICAST_HOPS DWORD Obtiene o crea el valor de TTL actual asociado al socket IPv6 para el tráfico de unidifusión. No es posible crear el TTL con un valor mayor que 255.
IPV6_UNICAST_IF DWORD (IF_INDEX) Obtiene o crea la interfaz saliente para enviar tráfico de multidifusión IPv6. Esta opción no cambia la interfaz predeterminada para recibir tráfico IPv6. Esta opción es importante para equipos de host múltiple. El valor de entrada para crear esta opción es un índice de interfaz de 4 bytes de la interfaz saliente deseada en el orden de bytes del host. La función GetAdaptersAddresses se puede usar para obtener la información del índice de interfaz. Si optval tiene el valor cero, la interfaz predeterminada para enviar tráfico IPv6 cambiará a un valor sin especificar. Al obtener esta opción, optval devuelve el índice de interfaz predeterminado actual para enviar tráfico IPv6 en el orden de bytes del host.
IPV6_USER_MTU DWORD Obtiene o crea un límite superior en la MTU de la capa IP (en bytes) en el socket especificado. Si el valor es mayor que la estimación de la MTU de ruta del sistema (que puede recuperar en un socket conectado mediante una consulta a la opción de socket IPV6_MTU), la opción no tendrá ningún efecto. Si el valor es menor, los paquetes salientes mayores se fragmentarán o no se enviarán, dependiendo del valor de IPV6_DONTFRAG. El valor predeterminado es IP_UNSPECIFIED_USER_MTU (MAXULONG). Para la seguridad de los tipos, debe usar las funciones WSAGetIPUserMtu y WSASetIPUserMtu en lugar de usar directamente la opción de socket.
IPV6_V6ONLY DWORD (booleano) Indica si un socket creado para la familia de direcciones AF_INET6 sólo está restringido a las comunicaciones IPv6. Los sockets creados para la familia de direcciones AF_INET6 se pueden usar para comunicaciones IPv6 e IPv4. Es posible que algunas aplicaciones deseen restringir su uso de un socket creado para la familia de direcciones AF_INET6 a comunicaciones IPv6 únicamente. Cuando este valor es distinto de cero (el valor predeterminado en Windows), se puede usar un socket creado para la familia de direcciones AF_INET6 para enviar y recibir paquetes IPv6 únicamente. Cuando este valor es cero, un socket creado para la familia de direcciones AF_INET6 se puede usar para enviar y recibir paquetes a y desde una dirección IPv6 o una dirección IPv4. Tenga en cuenta que la capacidad de interactuar con una dirección IPv4 exige el uso de direcciones asignadas IPv4. Esta opción de socket es compatible con Windows Vista o posterior.

Compatibilidad de Windows con opciones de socket IPPROTO_IPV6

Opción Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ORIGINAL_ARRIVAL_IF
IPV6_ADD_IFLIST A partir de Windows 10, versión 1803
IPV6_ADD_MEMBERSHIP
IPV6_DEL_IFLIST A partir de Windows 10, versión 1803
IPV6_DROP_MEMBERSHIP
IPV6_GET_IFLIST A partir de Windows 10, versión 1803
IPV6_HDRINCL
IPV6_HOPLIMIT
IPV6_IFLIST A partir de Windows 10, versión 1803
IPV6_JOIN_GROUP
IPV6_LEAVE_GROUP
IPV6_MULTICAST_HOPS
IPV6_MULTICAST_IF
IPV6_MULTICAST_LOOP
IPV6_PKTINFO
IPV6_PROTECTION_LEVEL
IPV6_RECVIF
IPV6_UNICAST_HOPS
IPV6_UNICAST_IF
IPV6_V6ONLY

Opción Windows Server 2003 Windows XP
IP_ORIGINAL_ARRIVAL_IF
IPV6_ADD_IFLIST
IPV6_ADD_MEMBERSHIP
IPV6_DEL_IFLIST
IPV6_DROP_MEMBERSHIP
IPV6_GET_IFLIST
IPV6_HDRINCL sí
IPV6_HOPLIMIT sí
IPV6_IFLIST
IPV6_JOIN_GROUP
IPV6_LEAVE_GROUP
IPV6_MULTICAST_HOPS
IPV6_MULTICAST_IF
IPV6_MULTICAST_LOOP
IPV6_PKTINFO
IPV6_PROTECTION_LEVEL
IPV6_RECVIF
IPV6_UNICAST_HOPS
IPV6_UNICAST_IF
IPV6_V6ONLY

Comentarios

En el Kit de desarrollo de software (SDK) de Microsoft Windows publicado para Windows Vista y versiones posteriores, la organización de los archivos de encabezado ha cambiado y el nivel de IPPROTO_IPV6 viene definido en el archivo de encabezado Ws2def.h que se incluye automáticamente en el archivo de encabezado Winsock2.h. Las opciones de socket IPPROTO_IPV6 vienen definidas en el archivo de encabezado Ws2ipdef.h que se incluye automáticamente en el archivo de encabezado Ws2tcpip.h. Los archivos de encabezado Ws2def.h y Ws2ipdef.h nunca deben usarse directamente.

La opción de socket IP_ORIGINAL_ARRIVAL_IF es compatible en Windows Server 2008 R2, así como en Windows 7.

Requisitos

Requisito Valor
Encabezado
Ws2def.h (Winsock2.h incluido);
Winsock2.h en Windows Server 2003 y Windows XP