Opciones de socket IPPROTO_IPV6

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

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

Algunas opciones de socket requieren más explicación de lo que estas tablas pueden transmitir; estas opciones contienen vínculos a información adicional.

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 contengan la interfaz de llegada original donde se recibió el paquete para los sockets de datagrama. Esta opción se usa con tecnologías de transición IPv6 (6to4, ISATAP y túneles Teredo, por ejemplo) que proporcionan asignación de direcciones y 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 Una el socket al grupo de multidifusión proporcionado en la interfaz especificada. 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) Quita un índice de interfaz de la iflist asociada 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 Deje el grupo de multidifusión proporcionado de la interfaz especificada. 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(boolean) Indica que la aplicación proporciona el encabezado IPv6 en todos los datos salientes. Si el parámetro optval se establece en 1 en la llamada a setsockopt, la opción está habilitada. Si optval se establece en 0, la opción está deshabilitada. El valor predeterminado está deshabilitado. Esta opción solo es válida para datagramas y sockets sin procesar (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 se establece en 1 en la llamada a setsockopt, la opción está habilitada. Si se establece en 0, la opción está deshabilitada. Esta opción solo es válida para datagramas y sockets sin procesar (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_IFLIST DWORD (booleano) Obtiene o establece el estado IP_IFLIST del socket. Cuando esta opción se establece en true, la recepción de datagramas está restringida a las interfaces que se encuentran en iflist. Los datagramas recibidos en cualquier otra interfaz se omiten. 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 la estimación del sistema de la MTU de ruta de acceso. El socket debe estar conectado.
IPV6_MTU_DISCOVER DWORD (PMTUD_STATE) Obtiene o establece el estado de detección de MTU de la ruta de acceso 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 MTU de ruta de acceso. IP_PMTUDISC_DONT y IP_PMTUDISC_PROBE desactivarán la detección de MTU de ruta de acceso. En el caso de los sockets de datagramas, si se establece en IP_PMTUDISC_DO , los intentos de enviar paquetes mayores que la MTU de ruta de acceso producirán un error. Si se establece en IP_PMTUDISC_DONT, los paquetes se fragmentarán según la MTU de interfaz. Si se establece en IP_PMTUDISC_PROBE, los intentos de enviar paquetes mayores que la MTU de interfaz producirán un error.
IPV6_MULTICAST_HOPS DWORD Obtiene o establece el valor de TTL asociado al tráfico de multidifusión IPv6 en el socket. No es válido establecer el TTL en un valor mayor que 255. Esta opción solo es válida para datagramas y sockets sin procesar (el tipo de socket debe ser SOCK_DGRAM o SOCK_RAW).
IPV6_MULTICAST_IF DWORD Obtiene o establece 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 establecer 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 la interfaz. Si optval se establece en NULL en la llamada a setsockopt, se usa la interfaz IPv6 predeterminada. Si optval es cero, se especifica la interfaz predeterminada para recibir multidifusión para enviar tráfico de multidifusión. Al obtener esta opción, optval devuelve 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 reproducirán en el búfer de recepción de sockets si también se unen en el grupo de multidifusión de destino. Si optval se establece en 1 en la llamada a setsockopt, la opción está habilitada. Si se establece en 0, la opción está deshabilitada. Esta opción solo es válida para datagramas y sockets sin procesar (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 del paquete.
IPV6_PROTECTION_LEVEL INT Habilita la restricción de un socket a un ámbito especificado, como direcciones con el mismo prefijo local de vínculo o sitio local. Proporciona varios niveles de restricción y configuración predeterminada. Consulte IPV6_PROTECTION_LEVEL para obtener más información.
IPV6_RECVIF DWORD (booleano) Indica si la pila de IP debe rellenar el búfer de control con detalles sobre qué interfaz recibió un paquete con un socket de datagrama. Cuando este valor es true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá datos de control opcionales que contienen la interfaz donde se recibió el paquete para los sockets de datagramas. Esta opción permite que la interfaz IPv6 donde se recibió el paquete se devuelva en la estructura WSAMSG . Esta opción solo es válida para datagramas y sockets sin procesar (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 contiene el campo de encabezado IPv6 de clase de tráfico en un datagrama recibido. Cuando este valor es true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá datos de control opcionales que contienen el valor del campo de encabezado IPv6 de clase de tráfico del datagrama recibido. Esta opción permite devolver el campo de encabezado IPv6 de clase de tráfico 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_UNICAST_HOPS DWORD Obtiene o establece el valor de TTL actual asociado al socket IPv6 para el tráfico de unidifusión. No es válido establecer el TTL en un valor mayor que 255.
IPV6_UNICAST_IF DWORD (IF_INDEX) Obtiene o establece la interfaz saliente para enviar tráfico 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 establecer 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 la interfaz. Si optval es cero, la interfaz predeterminada para enviar tráfico IPv6 se establece en 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 establece un límite superior en la MTU de capa IP (en bytes) para el socket especificado. Si el valor es mayor que la estimación del sistema de la MTU de ruta de acceso (que se puede recuperar en un socket conectado consultando la opción de socket IPV6_MTU ), la opción no tiene ningún efecto. Si el valor es menor, los paquetes salientes mayores que 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 tipos, debe usar las funciones WSAGetIPUserMtu y WSASetIPUserMtu en lugar de usar la opción de socket directamente.
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), solo se puede usar un socket creado para la familia de direcciones AF_INET6 para enviar y recibir paquetes IPv6. 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 de IPPROTO_IPV6

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

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

Observaciones

En el Kit de desarrollo de software (SDK) de Microsoft Windows publicado para Windows Vista y versiones posteriores, la organización de archivos de encabezado ha cambiado y IPPROTO_IPV6 nivel se define 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 se definen 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 se deben usar directamente.

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

Requisitos

Requisito Value
Encabezado
Ws2def.h (incluya Winsock2.h);
Winsock2.h en Windows Server 2003 y Windows XP