Compartilhar via


IP_PKTINFO opção de soquete

A opção de soquete IP_PKTINFO permite que um aplicativo habilite ou desabilite o retorno de informações de pacote pela função LPFN_WSARECVMSG (WSARecvMsg) em um soquete IPv4..

Para consultar o status dessa opção de soquete, chame a função getsockopt. Para definir essa opção, chame a função setsockopt com os parâmetros a seguir.

Valor da opção soquete

A constante que representa essa opção de soquete é 19.

Sintaxe

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]

Um descritor que identifica o soquete.

level [in]

O nível no qual a opção é definida. Use IPPROTO_IP para esta operação.

optname [in]

A opção de soquete para a qual obter ou definir o valor. Use IP_PKTINFO para esta operação.

optval [out]

Um ponteiro para o buffer que contém o valor da opção a ser definida. Esse parâmetro deve apontar para buffer igual ou maior que o tamanho de um valor DWORD .

Esse valor é tratado como um valor booliano com 0 usado para indicar FALSE (desabilitado) e um valor diferente de zero para indicar TRUE (habilitado).

optlen [in, out]

Um ponteiro para o tamanho, em bytes, do buffer optval . Esse tamanho deve ser igual ou maior que o tamanho de um valor DWORD .

Valor retornado

Se a operação for concluída com êxito, a função getsockopt ou setsockopt retornará zero.

Se a operação falhar, um valor de SOCKET_ERROR será retornado e um código de erro específico poderá ser recuperado chamando WSAGetLastError.

Código do erro Significado
WSANOTINITIALISED
Uma chamada WSAStartup bem-sucedida deve ocorrer antes de usar essa função.
WSAENETDOWN
O subsistema de rede falhou.
WSAEFAULT
Um dos parâmetros optval ou optlen apontam para a memória que não está em uma parte válida do espaço de endereço do usuário. Esse erro também será retornado se o valor apontado pelo parâmetro optlen for menor que o tamanho de um valor DWORD .
WSAEINPROGRESS
Uma chamada do Windows Sockets 1.1 de bloqueio está em andamento ou o provedor de serviços ainda está processando uma função de retorno de chamada.
WSAEINVAL
Foi fornecido um argumento inválido. Esse erro será retornado se o parâmetro de nível for desconhecido ou inválido. No Windows Vista e posterior, esse erro também será retornado se o soquete estiver em um estado de transição.
WSAENOPROTOOPT
A opção é desconhecida ou sem suporte da família de protocolos indicada. Esse erro será retornado se o parâmetro de tipo do descritor de soquete passado no parâmetro s não for SOCK_DGRAM ou SOCK_RAW.
WSAENOTSOCK
O descritor não é um soquete.

 

Comentários

A função getsockopt chamada com a opção de soquete IP_PKTINFO permite que um aplicativo determine se as informações do pacote devem ser retornadas pela função LPFN_WSARECVMSG (WSARecvMsg)para um soquete IPv4.

A função setsockopt chamada com a opção de soquete IP_PKTINFO permite que um aplicativo habilite ou desabilite o retorno de informações de pacote pela função LPFN_WSARECVMSG (WSARecvMsg). A opção IP_PKTINFO para um soquete é desabilitada (definida como FALSE) por padrão.

Quando essa opção de soquete está habilitada em um soquete IPv4 do tipo SOCK_DGRAM ou SOCK_RAW, a função LPFN_WSARECVMSG (WSARecvMsg) retorna informações de pacote na estrutura WSAMSG apontada pelo parâmetro lpMsg . Um dos objetos de dados de controle na estrutura WSAMSG retornada conterá uma estrutura in_pktinfo usada para armazenar informações de endereço de pacote recebidas.

Para datagramas recebidos pela função LPFN_WSARECVMSG (WSARecvMsg) sobre IPv4, o membro Control da estrutura WSAMSG recebida conterá uma estrutura WSABUF que contém uma estrutura WSACMSGHDR . O membro cmsg_level dessa estrutura WSACMSGHDR conteria IPPROTO_IP, o membro cmsg_type dessa estrutura conteria IP_PKTINFO e o membro cmsg_data conteria uma estrutura in_pktinfo usada para armazenar informações de endereço de pacote IPv4 recebidas. O endereço IPv4 na estrutura in_pktinfo é o endereço IPv4 do qual o pacote foi recebido.

Para um soquete de datagrama de pilha dupla, se um aplicativo exigir a função LPFN_WSARECVMSG (WSARecvMsg) para retornar informações de pacote em uma estrutura WSAMSG para datagramas recebidos por IPv4, IP_PKTINFO opção de soquete deverá ser definida como true no soquete. Se apenas a opção IPV6_PKTINFO estiver definida como true no soquete, as informações do pacote serão fornecidas para datagramas recebidos por IPv6, mas podem não ser fornecidas para datagramas recebidos por IPv4.

Se um aplicativo tentar definir a opção de soquete IP_PKTINFO em um soquete de datagrama de pilha dupla e o IPv4 estiver desabilitado no sistema, a função setsockopt falhará e WSAGetLastError retornará com um erro de WSAEINVAL. Esse mesmo erro também é retornado pela função setsockopt como resultado de outros erros. Se um aplicativo tentar definir uma opção de soquete de nível IPPROTO_IP em um soquete de pilha dupla e falhar com WSAEINVAL, o aplicativo deverá determinar se o IPv4 está desabilitado no computador local. Um método que pode ser usado para detectar se o IPv4 está habilitado ou desabilitado é chamar a função de soquete com o parâmetro af definido como AF_INET para tentar criar um soquete IPv4. Se a função de soquete falhar e WSAGetLastError retornar um erro de WSAEAFNOSUPPORT, isso significa que o IPv4 não está habilitado. Nesse caso, uma falha na função setsockopt ao tentar definir a opção de soquete IP_PKTINFO pode ser ignorada pelo aplicativo. Caso contrário, uma falha ao tentar definir a opção de soquete IP_PKTINFO deve ser tratada como um erro inesperado.

Observe que o arquivo de cabeçalho Ws2ipdef.h é incluído automaticamente no Ws2tcpip.h e nunca deve ser usado diretamente.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho
Ws2ipdef.h (inclua Ws2tcpip.h)

Confira também

Soquetes de pilha dupla

Getsockopt

in_pktinfo

Opções de soquete IPPROTO_IP

IPV6_PKTINFO

Setsockopt

soquete

WSAMSG

LPFN_WSARECVMSG (WSARecvMsg)