Opciones de socket IPPROTO_IP

En las tablas siguientes se describen IPPROTO_IP opciones de socket que se aplican a los sockets creados para la familia de direcciones IPv4 (AF_INET). 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 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 páginas adicionales.

Opciones

Opción Obtener Set Tipo optval Descripción
IP_ADD_IFLIST DWORD (IF_INDEX) Agrega un índice de interfaz a la opción IFLIST asociada a la IP_IFLIST .
IP_ADD_MEMBERSHIP ip_mreq Una el socket al grupo de multidifusión proporcionado en la interfaz especificada.
IP_ADD_SOURCE_MEMBERSHIP ip_mreq_source Una el grupo de multidifusión proporcionado en la interfaz especificada y acepte los datos procedentes de la dirección de origen proporcionada.
IP_BLOCK_SOURCE ip_mreq_source Quita el origen especificado como remitente al grupo y la interfaz de multidifusión proporcionados.
IP_DEL_IFLIST DWORD (IF_INDEX) Quita un índice de interfaz de la opción IFLIST asociada a la IP_IFLIST . Las entradas solo se pueden quitar mediante la aplicación, por lo que tenga en cuenta que las entradas pueden quedar obsoletas una vez que se quita una interfaz.
IP_DONTFRAGMENT DWORD (booleano) Indica que los datos no deben fragmentarse independientemente de la MTU local. Válido solo para protocolos orientados a mensajes. Los proveedores TCP/IP de Microsoft respetan esta opción para UDP e ICMP.
IP_DROP_MEMBERSHIP ip_mreq Deja el grupo de multidifusión especificado de la interfaz especificada. Los proveedores de servicios deben admitir esta opción cuando se admite la multidifusión. La compatibilidad se indica en la estructura de WSAPROTOCOL_INFO devuelta por una llamada de función WSAEnumProtocols con lo siguiente: XPI_SUPPORT_MULTIPOINT=1, XP1_MULTIPOINT_CONTROL_PLANE=0, XP1_MULTIPOINT_DATA_PLANE=0.
IP_DROP_SOURCE_MEMBERSHIP ip_mreq_source Quita la pertenencia al grupo de multidifusión, la interfaz y la dirección de origen especificados.
IP_GET_IFLIST DWORD[] (IF_INDEX[]) Obtiene la lista IFLIST actual asociada a la opción IP_IFLIST . Devuelve el error si IP_IFLIST no está habilitado.
IP_HDRINCL DWORD (booleano) Cuando se establece en TRUE, indica que la aplicación proporciona el encabezado IP. Solo se aplica a SOCK_RAW sockets. El proveedor de servicios TCP/IP puede establecer el campo id. si el valor proporcionado por la aplicación es cero. La opción IP_HDRINCL solo se aplica al tipo de protocolo SOCK_RAW. Un proveedor de servicios TCP/IP que admita SOCK_RAW también debe admitir IP_HDRINCL.
IP_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 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.
IP_MTU DWORD Obtiene la estimación del sistema de la MTU de ruta de acceso. El socket debe estar conectado.
IP_MTU_DISCOVER DWORD (PMTUD_STATE) Obtiene o establece el estado de detección de MTU de 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 datagrama, IP_PMTUDISC_DO forzará que todos los paquetes salientes tengan establecido el bit DF y un intento de enviar paquetes mayores que la MTU de ruta de acceso producirá un error. IP_PMTUDISC_DONT forzará que todos los paquetes salientes tengan el bit DF no establecido y los paquetes se fragmentarán según la interfaz MTU. IP_PMTUDISC_PROBE forzará que todos los paquetes salientes tengan establecido el bit DF y un intento de enviar paquetes mayores que la MTU de interfaz producirá un error.
IP_MULTICAST_IF DWORD Obtiene o establece la interfaz saliente para enviar tráfico de multidifusión IPv4. Esta opción no cambia la interfaz predeterminada para recibir tráfico de multidifusión IPv4. El valor de entrada para establecer esta opción es una dirección IPv4 de 4 bytes en el orden de bytes de red. Este parámetro DWORD también puede ser un índice de interfaz en orden de bytes de red. Cualquier dirección IP del bloque 0.x.x.x (primer octeto de 0), excepto la dirección IPv4 0.0.0.0 se trata como un índice de interfaz. Un índice de interfaz es un número de 24 bits y no se usa el bloque de direcciones IPv4 0.0.0.0/8 (este intervalo está reservado). El índice de interfaz se puede usar para especificar la interfaz predeterminada para el tráfico de multidifusión para IPv4. 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 IPv4 de multidifusión en el orden de bytes del host.
IP_MULTICAST_LOOP DWORD (booleano) Para un socket unido a uno o varios grupos de multidifusión, esto controla si recibirá una copia de los paquetes salientes enviados a esos grupos de multidifusión a través de la interfaz de multidifusión seleccionada. De forma predeterminada, IP_MULTICAST_LOOP está habilitado (valor 1/TRUE), por lo que los sockets recibirán paquetes de multidifusión coincidentes enviados por la máquina actual. Deshabilitar esta opción (estableciendo esta opción en 0/FALSE) significa que este socket no recibirá multidifusión enviada desde el equipo local, incluso si el socket está abierto en la interfaz de bucle invertido.

Esto no es compatible con la versión POSIX de IP_MULTICAST_LOOP: la opción debe establecerse en el socket receptor; mientras que la opción POSIX debe establecerse en el socket de envío.
IP_MULTICAST_TTL DWORD Establece u obtiene el valor de TTL asociado al tráfico de multidifusión IP en el socket.
IP_OPTIONS char [] Especifica las opciones ip que se van a insertar en los paquetes salientes. Al establecer nuevas opciones, se sobrescriben todas las opciones especificadas anteriormente. Al establecer optval en cero, se quitan todas las opciones especificadas anteriormente. no se requiere IP_OPTIONS soporte técnico; para comprobar si se admite IP_OPTIONS, use getsockopt para obtener las opciones actuales. Si se produce un error en getsockopt , no se admite IP_OPTIONS.
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 donde se recibió el paquete para los sockets de datagramas. Esta opción permite que la interfaz IPv4 donde se recibió 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).
IP_PKTINFO DWORD Indica que la función WSARecvMsg debe devolver la información del paquete.
IP_RECEIVE_BROADCAST DWORD (booleano) Permite o bloquea la recepción de difusión.
IP_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 IPv4 donde se recibió 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).
IP_RECVTOS DWORD (booleano) Indica si la pila ip debe rellenar el búfer de control con un mensaje que contiene el campo de encabezado IPv4 tipo de servicio (TOS) 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 IPv4 de TOS del datagrama recibido. Esta opción permite que el campo de encabezado TOS IPv4 del datagrama recibido se devuelva en la estructura WSAMSG . El tipo de mensaje devuelto será IP_TOS. Se devolverán todos los bits DSCP y ECN del campo TOS. Esta opción solo es válida en sockets de datagramas (el tipo de socket debe ser SOCK_DGRAM).
IP_RECVTTL 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).
IP_TOS DWORD (booleano) No debe usarse. La configuración del tipo de servicio (TOS) solo debe establecerse mediante la API de calidad de servicio. Consulte la sección Servicios diferenciados en la sección Calidad de servicio del SDK de plataforma para obtener más información.
IP_TTL DWORD (booleano) Cambia el valor predeterminado establecido por el proveedor de servicios TCP/IP en el campo TTL del encabezado IP en datagramas salientes. no se requiere IP_TTL soporte técnico; para comprobar si se admite IP_TTL, use getsockopt para obtener las opciones actuales. Si se produce un error en getsockopt , no se admite IP_TTL.
IP_UNBLOCK_SOURCE ip_mreq_source Agrega el origen especificado como remitente al grupo y la interfaz de multidifusión proporcionados.
IP_UNICAST_IF DWORD (IF_INDEX) Obtiene o establece la interfaz saliente para enviar tráfico IPv4. Esta opción no cambia la interfaz predeterminada para recibir tráfico IPv4. Esta opción es importante para equipos de host múltiple. El valor de entrada para establecer esta opción es una dirección IPv4 de 4 bytes en orden de bytes de red. Este parámetro DWORD debe ser un índice de interfaz en orden de bytes de red. Cualquier dirección IP del bloque 0.x.x.x (primer octeto de 0), excepto la dirección IPv4 0.0.0.0, se trata como un índice de interfaz. Un índice de interfaz es un número de 24 bits y no se usa el bloque de direcciones IPv4 0.0.0.0/8 (este intervalo está reservado). El índice de interfaz se puede usar para especificar la interfaz predeterminada para enviar tráfico para IPv4. 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 se establece en sin especificar. Al obtener esta opción, optval devuelve el índice de interfaz predeterminado actual para enviar tráfico IPv4 en el orden de bytes del host.
IP_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 IP_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, en función del valor de IP_DONTFRAGMENT. 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.
IP_WFP_REDIRECT_CONTEXT WSACMSGHDR con datos de control Un tipo de datos auxiliar de socket de datagrama (cmsg_type) para indicar el contexto de redireccionamiento de un socket UDP usado por un servicio de redirección de plataforma de filtrado de Windows (PMA) en modo de usuario.
IP_WFP_REDIRECT_RECORDS WSACMSGHDR con datos de control Un tipo de datos auxiliar de socket de datagrama (cmsg_type) para indicar el registro de redireccionamiento de un socket UDP usado por un servicio de redirección de Windows Filtering Platform (PMA) en modo de usuario.

Compatibilidad de Windows con opciones de IP_PROTO

Opción Windows 10 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ADD_IFLIST A partir de Windows 10, versión 1803
IP_ADD_MEMBERSHIP x x x x x x
IP_ADD_SOURCE_MEMBERSHIP x x x x x x
IP_BLOCK_SOURCE x x x x x x
IP_DEL_IFLIST A partir de Windows 10, versión 1803
IP_DONTFRAGMENT x x x x x x
IP_DROP_MEMBERSHIP x x x x x x
IP_DROP_SOURCE_MEMBERSHIP x x x x x x
IP_GET_IFLIST A partir de Windows 10, versión 1803
IP_HDRINCL x x x x x x
IP_IFLIST A partir de Windows 10, versión 1803
IP_MULTICAST_IF x x x x x x
IP_MULTICAST_LOOP x x x x x x
IP_MULTICAST_TTL x x x x x x
IP_OPTIONS x x x x x x
IP_ORIGINAL_ARRIVAL_IF x x x x
IP_PKTINFO x x x x x x
IP_RECEIVE_BROADCAST x x x x x x
IP_RECVIF A partir de Windows 10, versión 1703 x x x x x
IP_RECVTTL x
IP_TOS x x x
IP_TTL x x x x x x
IP_UNBLOCK_SOURCE x x x x x x
IP_UNICAST_IF x x x x x x
IP_WFP_REDIRECT_CONTEXT x x x
IP_WFP_REDIRECT_RECORDS x x x

Opción Windows Server 2003 Windows XP
IP_ADD_IFLIST
IP_ADD_MEMBERSHIP x x
IP_ADD_SOURCE_MEMBERSHIP x x
IP_BLOCK_SOURCE x x
IP_DEL_IFLIST
IP_DONTFRAGMENT x x
IP_DROP_MEMBERSHIP x x
IP_DROP_SOURCE_MEMBERSHIP x x
IP_GET_IFLIST
IP_HDRINCL x x
IP_IFLIST
IP_MULTICAST_IF x x
IP_MULTICAST_LOOP x x
IP_MULTICAST_TTL x x
IP_OPTIONS x x
IP_ORIGINAL_ARRIVAL_IF
IP_PKTINFO x x
IP_RECEIVE_BROADCAST x x
IP_RECVIF
IP_RECVTTL
IP_TOS
IP_TTL x x
IP_UNBLOCK_SOURCE x x
IP_UNICAST_IF
IP_WFP_REDIRECT_CONTEXT
IP_WFP_REDIRECT_RECORDS

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_IP nivel se define en el archivo de encabezado Ws2def.h que se incluye automáticamente en el archivo de encabezado Winsock2.h . Algunas de las opciones de socket de IPPROTO_IP se definen en el archivo de encabezado Ws2ipdef.h que el archivo de encabezado Ws2tcpip.h incluye automáticamente. Las opciones de socket de IPPROTO_IP restantes se definen en el archivo de encabezado Wsipv6ok.h que el archivo de encabezado Winsock2.h incluye automáticamente. Los archivos de encabezado Ws2def.h, Ws2ipdef.h y Wsipv6ok.h nunca se deben usar directamente.

En el SDK de plataforma publicado para Windows Server 2003 y Windows XP, el nivel de IPPROTO_IP se define en el archivo de encabezado Winsock2.h . Algunas de las opciones de socket de IPPROTO_IP se definen en el archivo de encabezado Ws2tcpip.h . Las opciones de socket de IPPROTO_IP restantes se definen en el archivo de encabezado Wsipv6ok.h que el archivo de encabezado Winsock2.h incluye automáticamente. El archivo de encabezado Wsipv6ok.h nunca se debe usar directamente.

Requisitos

Requisito Value
Encabezado
Ws2def.h (incluya Winsock2.h);
Ws2ipdef.h (incluya Ws2tcpip.h);
Wsipv6ok.h (incluya Winsock2.h)