opzione socket IP_PKTINFO

L'opzione socket IP_PKTINFO consente a un'applicazione di abilitare o disabilitare la restituzione delle informazioni sui pacchetti dalla funzione LPFN_WSARECVMSG (WSARecvMsg) in un socket IPv4.

Per eseguire una query sullo stato di questa opzione socket, chiamare la funzione getsockopt . Per impostare questa opzione, chiamare la funzione setsockopt con i parametri seguenti.

Valore dell'opzione socket

La costante che rappresenta questa opzione socket è 19.

Sintassi

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
);

Parametri

s [in]

Descrittore che identifica il socket.

level [in]

Livello in cui è definita l'opzione. Usare IPPROTO_IP per questa operazione.

optname [in]

Opzione socket per cui ottenere o impostare il valore. Usare IP_PKTINFO per questa operazione.

optval [out]

Puntatore al buffer contenente il valore per l'opzione da impostare. Questo parametro deve puntare al buffer uguale o maggiore della dimensione di un valore DWORD .

Questo valore viene considerato come un valore booleano con 0 usato per indicare FALSE (disabilitato) e un valore diverso da zero per indicare TRUE (abilitato).

optlen [in, out]

Puntatore alle dimensioni, in byte, del buffer optval . Questa dimensione deve essere uguale o maggiore della dimensione di un valore DWORD .

Valore restituito

Se l'operazione viene completata correttamente, la funzione getsockopt o setsockopt restituisce zero.

Se l'operazione non riesce, viene restituito un valore di SOCKET_ERROR e è possibile recuperare un codice di errore specifico chiamando WSAGetLastError.

Codice di errore Significato
WSANOTINITIALISED
Prima di usare questa funzione, è necessario che venga eseguita una chiamata WSAStartup riuscita.
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEFAULT
Uno dei parametri optval o optlen punta alla memoria che non si trova in una parte valida dello spazio indirizzi utente. Questo errore viene restituito anche se il valore a cui punta il parametro optlen è minore della dimensione di un valore DWORD .
WSAEINPROGRESS
È in corso una chiamata di Windows Sockets 1.1 bloccante oppure il provider di servizi sta ancora elaborando una funzione di callback.
WSAEINVAL
Argomento fornito non valido. Questo errore viene restituito se il parametro di livello è sconosciuto o non valido. In Windows Vista e versioni successive, questo errore viene restituito anche se il socket si trovava in uno stato transitorio.
WSAENOPROTOOPT
L'opzione è sconosciuta o non supportata dalla famiglia di protocolli indicata. Questo errore viene restituito se il parametro di tipo per il descrittore socket passato nel parametro s non è stato SOCK_DGRAM o SOCK_RAW.
WSAENOTSOCK
Il descrittore non è un socket.

 

Commenti

La funzione getsockopt chiamata con l'opzione socket IP_PKTINFO consente a un'applicazione di determinare se le informazioni sui pacchetti devono essere restituite dalla funzione LPFN_WSARECVMSG (WSARecvMsg)per un socket IPv4.

La funzione setsockopt chiamata con l'opzione socket IP_PKTINFO consente a un'applicazione di abilitare o disabilitare la restituzione di informazioni sui pacchetti dalla funzione LPFN_WSARECVMSG (WSARecvMsg). L'opzione IP_PKTINFO per un socket è disabilitata (impostata su FALSE) per impostazione predefinita.

Quando questa opzione socket è abilitata in un socket IPv4 di tipo SOCK_DGRAM o SOCK_RAW, la funzione LPFN_WSARECVMSG (WSARecvMsg) restituisce informazioni sui pacchetti nella struttura WSAMSG a cui punta il parametro lpMsg . Uno degli oggetti dati del controllo nella struttura WSAMSG restituita conterrà una struttura in_pktinfo utilizzata per archiviare le informazioni sull'indirizzo del pacchetto ricevuto.

Per i datagrammi ricevuti dalla funzione LPFN_WSARECVMSG (WSARecvMsg) su IPv4, il membro Control della struttura WSAMSG ricevuta conterrà una struttura WSABUF che contiene una struttura WSACMSGHDR . Il membro cmsg_level di questa struttura WSACMSGHDR conterrà IPPROTO_IP, il membro cmsg_type di questa struttura conterrà IP_PKTINFO e il membro cmsg_data conterrà una struttura in_pktinfo utilizzata per archiviare le informazioni sull'indirizzo del pacchetto IPv4 ricevuto. L'indirizzo IPv4 nella struttura in_pktinfo è l'indirizzo IPv4 da cui è stato ricevuto il pacchetto.

Per un socket di datagrammi dual stack, se un'applicazione richiede la funzione LPFN_WSARECVMSG (WSARecvMsg) per restituire informazioni sui pacchetti in una struttura WSAMSG per i datagrammi ricevuti su IPv4, IP_PKTINFO opzione socket deve essere impostata su true nel socket. Se solo l'opzione IPV6_PKTINFO è impostata su true nel socket, le informazioni sui pacchetti verranno fornite per i datagrammi ricevuti su IPv6, ma potrebbero non essere fornite per i datagrammi ricevuti su IPv4.

Se un'applicazione tenta di impostare l'opzione socket IP_PKTINFO su un socket datagram a doppio stack e IPv4 è disabilitata nel sistema, la funzione setsockopt avrà esito negativo e WSAGetLastError restituirà un errore WSAEINVAL. Lo stesso errore viene restituito anche dalla funzione setsockopt in seguito ad altri errori. Se un'applicazione tenta di impostare un'opzione socket a livello di IPPROTO_IP su un socket a doppio stack e ha esito negativo con WSAEINVAL, l'applicazione deve determinare se IPv4 è disabilitato nel computer locale. Un metodo che può essere usato per rilevare se IPv4 è abilitato o disabilitato consiste nel chiamare la funzione socket con il parametro af impostato su AF_INET per provare a creare un socket IPv4. Se la funzione socket ha esito negativo e WSAGetLastError restituisce un errore WSAEAFNOSUPPORT, significa che IPv4 non è abilitato. In questo caso, un errore della funzione setsockopt quando si tenta di impostare l'opzione socket IP_PKTINFO può essere ignorata dall'applicazione. In caso contrario, un errore durante il tentativo di impostare l'opzione socket IP_PKTINFO deve essere considerata come un errore imprevisto.

Si noti che il file di intestazione Ws2ipdef.h viene automaticamente incluso in Ws2tcpip.h e non deve mai essere usato direttamente.

Requisiti

Requisito Valore
Client minimo supportato
Windows XP [solo app desktop]
Server minimo supportato
Windows Server 2003 [solo app desktop]
Intestazione
Ws2ipdef.h (include Ws2tcpip.h)

Vedi anche

Socket dual stack

getsockopt

in_pktinfo

Opzioni socket IPPROTO_IP

IPV6_PKTINFO

Setsockopt

Socket

WSAMSG

LPFN_WSARECVMSG (WSARecvMsg)