Compartir a través de


Opciones de socket IPPROTO_IP

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

Opciones

Opción Obtener Yammer Establecer Tipo optval Descripción
IP_ADD_IFLIST DWORD (IF_INDEX) Agrega un índice de interfaz al IFLIST asociado a la opción IP_IFLIST.
IP_ADD_MEMBERSHIP ip_mreq Une el socket al grupo de multidifusión proporcionado en la interfaz correspondiente.
IP_ADD_SOURCE_MEMBERSHIP ip_mreq_source Une el grupo de multidifusión proporcionado en la interfaz correspondiente y acepte los datos procedentes de la dirección de origen facilitada.
IP_BLOCK_SOURCE ip_mreq_source Quita un origen determinado como remitente en el grupo de multidifusión y la interfaz facilitados.
IP_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.
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 en UDP e ICMP.
IP_DROP_MEMBERSHIP ip_mreq Abandona el grupo de multidifusión correspondiente de la interfaz indicada. Los proveedores de servicios deben admitir esta opción cuando se admite la multidifusión. La compatibilidad se indica en la estructura WSAPROTOCOL_INFO devuelta por la llamada a la 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 Se deja de pertenecer al grupo de multidifusión, la interfaz y la dirección de origen correspondientes.
IP_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.
IP_HDRINCL DWORD (booleano) Cuando se cambia el parámetro a TRUE, indica que la aplicación incluye el encabezado IP. Solo se aplica a sockets SOCK_RAW. El proveedor de servicios TCP/IP puede crear 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 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.
IP_MTU DWORD Obtiene el cálculo de la MTU de la ruta del sistema. El socket debe estar conectado.
IP_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 datagrama, IP_PMTUDISC_DO forzará que todos los paquetes salientes tengan el bit DF (No fragmentar) asignado y si se envían paquetes más grandes que la MTU de la ruta, se producirá un error. IP_PMTUDISC_DONT forzará que todos los paquetes salientes tengan asignado el bit DF y los paquetes se fragmentarán según la MTU de la interfaz. IP_PMTUDISC_PROBE forzará que todos los paquetes salientes tengan el bit DF asignado y si se intenta enviar paquetes mayores que la MTU de la interfaz, se producirá un error.
IP_MULTICAST_IF DWORD Obtiene o crea 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 la entrada para crear esta opción es una dirección IPv4 de 4 bytes en 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 considera 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 indicar la interfaz predeterminada para el tráfico de multidifusión para IPv4. 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 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) En un socket unido a uno o varios grupos de multidifusión, este controlará si recibe una copia de 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 iguales enviados por la máquina actual. Si deshabilita esta opción (al cambiar al valor 0/FALSE) significa que este socket no recibirá multidifusiones enviadas del equipo local, aunque 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 crearse en el socket receptor; mientras que la opción POSIX debe crearse en el socket de envío.
IP_MULTICAST_TTL DWORD Crea 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 de salida. Al crear nuevas opciones, se sobrescriben todas las opciones especificadas anteriormente. Al poner el optval a cero, se eliminan todas las opciones especificadas anteriormente. No es necesaria la compatibilidad con IP_OPTIONS; para comprobar si se admite IP_OPTIONS, use getsockopt para obtener las opciones actuales. Si se produce un error en getsockopt, no se admitirá IP_OPTIONS.
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 donde se recibió el paquete para los sockets de datagramas. Esta opción permite que la interfaz IPv4 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).
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 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 IPv4 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).
IP_RECVTOS DWORD (booleano) Indica si la pila IP debe rellenar el búfer de control con un mensaje que incluya el campo de encabezado IPv4 de tipo de servicio (TOS) en un datagrama recibido. Cuando este valor es true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá los datos de control opcionales que incluyan el valor del campo de encabezado TOS de IPv4 del datagrama recibido. Esta opción permite que el campo de encabezado TOS de 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_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 TOS (tipo de servicio) de IPv4 en un datagrama recibido. Cuando este valor es true, la función LPFN_WSARECVMSG (WSARecvMsg) devolverá los datos de control opcionales que incluyan los bits ECN del valor del campo de encabezado TOS de IPv4 del datagrama recibido. Esta opción permite devolver los bits ECN del campo de encabezado TOS de IPv4 del datagrama recibido en la estructura WSAMSG. El tipo de mensaje devuelto será IP_ECN. Se devolverán los 2 bits ECN del campo TOS. 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.
IP_RECVTTL 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).
IP_TOS DWORD (booleano) No utilice. Los ajustes del tipo de servicio (TOS) solo deben establecerse mediante la API de calidad de servicio. Consulte 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 es necesaria la compatibilidad con IP_TTL; para comprobar si se admite IP_TTL, use getsockopt para obtener las opciones actuales. Si se produce un error en getsockopt, no se admitirá IP_TTL.
IP_UNBLOCK_SOURCE ip_mreq_source Agrega un origen determinado como remitente en el grupo de multidifusión y la interfaz facilitados.
IP_UNICAST_IF DWORD (IF_INDEX) Obtiene o crea la interfaz saliente para enviar tráfico de multidifusión 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 la entrada para crear 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 considera 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 indicar la interfaz predeterminada para el envío de tráfico de tipo IPv4. 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 cambiará a un valor 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 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 IP_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 IP_DONTFRAGMENT. 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.
IP_WFP_REDIRECT_CONTEXT WSACMSGHDR con datos de control Un tipo de datos auxiliar del socket de datagramas (cmsg_type) para indicar el contexto de redireccionamiento de un socket UDP usado por un servicio de redireccionamiento de la Plataforma de filtrado de Windows (Windows Filtering Platform, WFP) en modo de usuario.
IP_WFP_REDIRECT_RECORDS WSACMSGHDR con datos de control Un tipo de datos auxiliar del socket de datagramas (cmsg_type) para indicar el registro de redireccionamiento de un socket UDP usado por un servicio de redireccionamiento de la Plataforma de filtrado de Windows (Windows Filtering Platform, WFP) en modo de usuario.

Compatibilidad de Windows con opciones 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
IP_ADD_SOURCE_MEMBERSHIP
IP_BLOCK_SOURCE
IP_DEL_IFLIST A partir de Windows 10, versión 1803
IP_DONTFRAGMENT
IP_DROP_MEMBERSHIP
IP_DROP_SOURCE_MEMBERSHIP
IP_GET_IFLIST A partir de Windows 10, versión 1803
IP_HDRINCL
IP_IFLIST A partir de Windows 10, versión 1803
IP_MULTICAST_IF
IP_MULTICAST_LOOP
IP_MULTICAST_TTL
IP_OPTIONS
IP_ORIGINAL_ARRIVAL_IF
IP_PKTINFO
IP_RECEIVE_BROADCAST
IP_RECVIF A partir de Windows 10, versión 1703
IP_RECVTTL
IP_TOS
IP_TTL
IP_UNBLOCK_SOURCE
IP_UNICAST_IF
IP_WFP_REDIRECT_CONTEXT
IP_WFP_REDIRECT_RECORDS

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

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_IP viene definido 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 IPPROTO_IP vienen definidas en el archivo de encabezado Ws2ipdef.h que se incluye automáticamente en el archivo de encabezado Ws2tcpip.h. El resto de opciones de socket IPPROTO_IP vienen definidas en el archivo de encabezado Wsipv6ok.h que se incluye automáticamente en el archivo de encabezado Winsock2.h. 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 viene definido en el archivo de encabezado Winsock2.h. Algunas de las opciones de socket IPPROTO_IP vienen definidas en el archivo de encabezado Ws2tcpip.h. El resto de opciones de socket IPPROTO_IP vienen definidas en el archivo de encabezado Wsipv6ok.h que se incluye automáticamente en el archivo de encabezado Winsock2.h. El archivo de encabezado Wsipv6ok.h nunca debe usarse directamente.

Requisitos

Requisito Valor
Encabezado
Ws2def.h (Winsock2.h incluido);
Ws2ipdef.h (Ws2tcpip.h incluido);
Wsipv6ok.h (Winsock2.h incluido)