IP_PKTINFO opción de socket
La opción de socket IP_PKTINFO permite que una aplicación habilite o deshabilite la devolución de información de paquetes por la función LPFN_WSARECVMSG (WSARecvMsg) en un socket IPv4.
Para consultar el estado de esta opción de socket, llame a la función getsockopt . Para establecer esta opción, llame a la función setsockopt con los parámetros siguientes.
Valor de opción de socket
La constante que representa esta opción de socket es 19.
Sintaxis
int getsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IP, // level
(int) IP_PKTINFO, // optname
(char *) optval, // output buffer,
(int) optlen, // size of output buffer
);
int setsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IP, // level
(int) IP_PKTINFO, // optname
(char *) optval, // input buffer,
(int) optlen, // size of input buffer
);
Parámetros
-
s [in]
-
Descriptor que identifica el socket.
-
level [in]
-
Nivel en el que se define la opción. Use IPPROTO_IP para esta operación.
-
optname [in]
-
Opción de socket para la que se va a obtener o establecer el valor. Use IP_PKTINFO para esta operación.
-
optval [out]
-
Puntero al búfer que contiene el valor de la opción que se va a establecer. Este parámetro debe apuntar al búfer igual o mayor que el tamaño de un valor DWORD .
Este valor se trata como un valor booleano con 0 que se usa para indicar FALSE (deshabilitado) y un valor distinto de cero para indicar TRUE (habilitado).
-
optlen [in, out]
-
Puntero al tamaño, en bytes, del búfer optval . Este tamaño debe ser igual o mayor que el tamaño de un valor DWORD .
Valor devuelto
Si la operación se completa correctamente, la función getsockopt o setsockopt devuelve cero.
Si se produce un error en la operación, se devuelve un valor de SOCKET_ERROR y se puede recuperar un código de error específico llamando a WSAGetLastError.
Código de error | Significado |
---|---|
Debe producirse una llamada de WSAStartup correcta antes de usar esta función. |
|
Error en el subsistema de red. |
|
Uno de los parámetros optval o optlen apunta a la memoria que no está en una parte válida del espacio de direcciones del usuario. Este error también se devuelve si el valor al que apunta el parámetro optlen es menor que el tamaño de un valor DWORD . |
|
Una llamada de Bloqueo de Windows Sockets 1.1 está en curso o el proveedor de servicios sigue procesando una función de devolución de llamada. |
|
Se proporcionó un argumento no válido. Este error se devuelve si el parámetro level es desconocido o no válido. En Windows Vista y versiones posteriores, este error también se devuelve si el socket estaba en un estado transitorio. |
|
La opción es desconocida o no admitida por la familia de protocolos indicada. Este error se devuelve si el parámetro de tipo para el descriptor de socket pasado en el parámetro s no se SOCK_DGRAM ni SOCK_RAW. |
|
El descriptor no es un socket. |
Observaciones
La función getockopt llamada con la opción de socket IP_PKTINFO permite a una aplicación determinar si la función LPFN_WSARECVMSG (WSARecvMsg) devuelve información de paquetes para un socket IPv4.
La función setsockopt llamada con la opción de socket IP_PKTINFO permite que una aplicación habilite o deshabilite la devolución de información de paquetes mediante la función LPFN_WSARECVMSG (WSARecvMsg). La opción IP_PKTINFO para un socket está deshabilitada (establecida en FALSE) de forma predeterminada.
Cuando esta opción de socket está habilitada en un socket IPv4 de tipo SOCK_DGRAM o SOCK_RAW, la función LPFN_WSARECVMSG (WSARecvMsg) devuelve información de paquetes en la estructura WSAMSG a la que apunta el parámetro lpMsg . Uno de los objetos de datos de control de la estructura WSAMSG devuelta contendrá una estructura de in_pktinfo utilizada para almacenar la información de dirección de paquete recibida.
Para los datagramas recibidos por la función LPFN_WSARECVMSG (WSARecvMsg) a través de IPv4, el miembro Control de la estructura WSAMSG recibida contendrá una estructura WSABUF que contiene una estructura WSACMSGHDR . El miembro cmsg_level de esta estructura WSACMSGHDR contendrá IPPROTO_IP, el cmsg_type miembro de esta estructura contendrá IP_PKTINFO y el miembro cmsg_data contendrá una estructura de in_pktinfo utilizada para almacenar la información de dirección de paquete IPv4 recibida. La dirección IPv4 de la estructura in_pktinfo es la dirección IPv4 desde la que se recibió el paquete.
Para un socket de datagrama de doble pila, si una aplicación requiere la función de LPFN_WSARECVMSG (WSARecvMsg) para devolver información de paquetes en una estructura WSAMSG para datagramas recibidos a través de IPv4, IP_PKTINFO opción de socket debe establecerse en true en el socket. Si solo la opción de IPV6_PKTINFO está establecida en true en el socket, se proporcionará información de paquetes para datagramas recibidos a través de IPv6, pero no se puede proporcionar para datagramas recibidos a través de IPv4.
Si una aplicación intenta establecer la opción de socket de IP_PKTINFO en un socket de datagramas de doble pila y IPv4 está deshabilitado en el sistema, se producirá un error en la función setsockopt y WSAGetLastError devolverá un error de WSAEINVAL. La función setsockopt también devuelve este mismo error como resultado de otros errores. Si una aplicación intenta establecer una opción de socket de nivel de IPPROTO_IP en un socket de doble pila y se produce un error con WSAEINVAL, la aplicación debe determinar si IPv4 está deshabilitado en el equipo local. Un método que se puede usar para detectar si IPv4 está habilitado o deshabilitado es llamar a la función de socket con el parámetro af establecido en AF_INET para intentar crear un socket IPv4. Si se produce un error en la función de socket y WSAGetLastError devuelve un error de WSAEAFNOSUPPORT, significa que IPv4 no está habilitado. En este caso, la aplicación puede omitir un error de función setsockopt al intentar establecer la opción de socket IP_PKTINFO. De lo contrario, un error al intentar establecer la opción de socket IP_PKTINFO debe tratarse como un error inesperado.
Tenga en cuenta que el archivo de encabezado Ws2ipdef.h se incluye automáticamente en Ws2tcpip.h y nunca debe usarse directamente.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado |
|
Vea también