Opzioni socket IPPROTO_IP

Le tabelle seguenti descrivono IPPROTO_IP opzioni socket applicabili ai socket creati per la famiglia di indirizzi IPv4 (AF_INET). Per altre informazioni su come ottenere e impostare le opzioni socket, vedere le pagine di riferimento della funzione getsockopt e setsockopt.

Per enumerare i protocolli e individuare le proprietà supportate per ogni protocollo installato, usare la funzione WSAEnumProtocols, WSCEnumProtocols o WSCEnumProtocols32.

Alcune opzioni socket richiedono più spiegazioni di quanto queste tabelle possano trasmettere; tali opzioni contengono collegamenti a pagine aggiuntive.

Opzioni

Opzione Recupero Set Tipo Optval Descrizione
IP_ADD_IFLIST yes DWORD (IF_INDEX) Aggiunge un indice di interfaccia all'opzione IFLIST associata all'opzione IP_IFLIST .
IP_ADD_MEMBERSHIP yes ip_mreq Unire il socket al gruppo multicast fornito nell'interfaccia specificata.
IP_ADD_SOURCE_MEMBERSHIP yes ip_mreq_source Unire il gruppo multicast fornito nell'interfaccia specificata e accettare l'origine dati dall'indirizzo di origine fornito.
IP_BLOCK_SOURCE yes ip_mreq_source Rimuove l'origine specificata come mittente per il gruppo e l'interfaccia multicast forniti.
IP_DEL_IFLIST yes DWORD (IF_INDEX) Rimuove un indice di interfaccia dall'opzione IFLIST associata all'opzione IP_IFLIST . Le voci possono essere rimosse solo dall'applicazione, quindi tenere presente che le voci potrebbero non essere aggiornate dopo la rimozione di un'interfaccia.
IP_DONTFRAGMENT yes yes DWORD (booleano) Indica che i dati non devono essere frammentati indipendentemente dall'MTU locale. Valido solo per i protocolli orientati ai messaggi. I provider TCP/IP Microsoft rispettano questa opzione per UDP e ICMP.
IP_DROP_MEMBERSHIP yes ip_mreq Lascia il gruppo multicast specificato dall'interfaccia specificata. I provider di servizi devono supportare questa opzione quando è supportato il multicast. Il supporto è indicato nella struttura WSAPROTOCOL_INFO restituita da una chiamata di funzione WSAEnumProtocols con il codice seguente: XPI_SUPPORT_MULTIPOINT=1, XP1_MULTIPOINT_CONTROL_PLANE=0, XP1_MULTIPOINT_DATA_PLANE=0.
IP_DROP_SOURCE_MEMBERSHIP yes ip_mreq_source Elimina l'appartenenza al gruppo multicast, all'interfaccia e all'indirizzo di origine specificati.
IP_GET_IFLIST yes DWORD[] (IF_INDEX[]) Ottiene l'ifLIST corrente associato all'opzione IP_IFLIST . Restituisce un errore se IP_IFLIST non è abilitato.
IP_HDRINCL yes yes DWORD (booleano) Se impostato su TRUE, indica che l'applicazione fornisce l'intestazione IP. Si applica solo ai socket SOCK_RAW. Il provider di servizi TCP/IP può impostare il campo ID, se il valore fornito dall'applicazione è zero. L'opzione IP_HDRINCL viene applicata solo al tipo di protocollo SOCK_RAW. Un provider di servizi TCP/IP che supporta SOCK_RAW deve supportare anche IP_HDRINCL.
IP_IFLIST yes yes DWORD (booleano) Ottiene o imposta lo stato IP_IFLIST del socket. Quando questa opzione è impostata su true, la ricezione di Datagram è limitata alle interfacce che si trovano in IFLIST. I datagrammi ricevuti in qualsiasi altra interfaccia vengono ignorati. IFLIST avvia vuoto. Usare IP_ADD_IFLIST e IP_DEL_IFLIST per modificare IFLIST.
IP_MTU yes DWORD Ottiene la stima del percorso MTU del sistema. Il socket deve essere connesso.
IP_MTU_DISCOVER yes yes DWORD (PMTUD_STATE) Ottiene o imposta lo stato di individuazione MTU del percorso per il socket. Il valore predefinito è IP_PMTUDISC_NOT_SET. Per i socket di flusso, IP_PMTUDISC_NOT_SET e IP_PMTUDISC_DO eseguiranno l'individuazione MTU del percorso. IP_PMTUDISC_DONT e IP_PMTUDISC_PROBE disattivano l'individuazione MTU del percorso. Per i socket di datagrammi, IP_PMTUDISC_DO forza il set di bit DF di tutti i pacchetti in uscita e un tentativo di inviare pacchetti di dimensioni superiori al percorso MTU genererà un errore. IP_PMTUDISC_DONT forzare l'impostazione del bit DF per tutti i pacchetti in uscita e i pacchetti verranno frammentati in base all'interfaccia MTU. IP_PMTUDISC_PROBE forza tutti i pacchetti in uscita a impostare il bit DF e un tentativo di inviare pacchetti di dimensioni superiori a MTU dell'interfaccia genererà un errore.
IP_MULTICAST_IF yes yes DWORD Ottiene o imposta l'interfaccia in uscita per l'invio del traffico multicast IPv4. Questa opzione non modifica l'interfaccia predefinita per la ricezione del traffico multicast IPv4. Il valore di input per l'impostazione di questa opzione è un indirizzo IPv4 a 4 byte nell'ordine dei byte di rete. Questo parametro DWORD può anche essere un indice di interfaccia nell'ordine dei byte di rete. Qualsiasi indirizzo IP nel blocco 0.x.x.x (primo ottetto di 0) ad eccezione dell'indirizzo IPv4 0.0.0.0 viene considerato come indice di interfaccia. Un indice di interfaccia è un numero a 24 bit e il blocco di indirizzi IPv4 0.0.0.0/8 non viene usato (questo intervallo è riservato). L'indice dell'interfaccia può essere usato per specificare l'interfaccia predefinita per il traffico multicast per IPv4. Se optval è zero , viene specificata l'interfaccia predefinita per la ricezione del multicast per l'invio di traffico multicast. Quando si ottiene questa opzione, optval restituisce l'indice di interfaccia predefinito corrente per l'invio del traffico IPv4 multicast nell'ordine dei byte host.
IP_MULTICAST_LOOP yes yes DWORD (booleano) Per un socket aggiunto a uno o più gruppi multicast, questo controlla se riceverà una copia dei pacchetti in uscita inviati a tali gruppi multicast tramite l'interfaccia multicast selezionata. Per impostazione predefinita, IP_MULTICAST_LOOP è abilitato (valore 1/TRUE), quindi i socket riceveranno pacchetti multicast corrispondenti inviati dal computer corrente. La disabilitazione di questa opzione (impostandola su 0/FALSE) significa che questo socket non riceverà i multicast inviati dal computer locale, anche se il socket è aperto nell'interfaccia di loopback.

Non è compatibile con la versione POSIX di IP_MULTICAST_LOOP: l'opzione deve essere impostata sul socket ricevente; mentre l'opzione POSIX deve essere impostata sul socket di invio.
IP_MULTICAST_TTL yes yes DWORD Imposta/ottiene il valore TTL associato al traffico multicast IP nel socket.
IP_OPTIONS yes yes char [] Specifica le opzioni IP da inserire nei pacchetti in uscita. L'impostazione di nuove opzioni sovrascrive tutte le opzioni specificate in precedenza. L'impostazione di optval su zero rimuove tutte le opzioni specificate in precedenza. IP_OPTIONS non è necessario il supporto; per verificare se IP_OPTIONS è supportato, usare getsockopt per ottenere le opzioni correnti. Se getsockopt ha esito negativo, IP_OPTIONS non è supportato.
IP_ORIGINAL_ARRIVAL_IF yes yes DWORD (booleano) Indica se la funzione LPFN_WSARECVMSG (WSARecvMsg) deve restituire dati di controllo facoltativi contenenti l'interfaccia di arrivo in cui è stato ricevuto il pacchetto per i socket del datagram. Questa opzione consente la restituzione del pacchetto nell'interfaccia IPv4 nella struttura WSAMSG. Questa opzione è valida solo per datagrammi e socket non elaborati (il tipo di socket deve essere SOCK_DGRAM o SOCK_RAW).
IP_PKTINFO yes yes DWORD Indica che le informazioni sui pacchetti devono essere restituite dalla funzione WSARecvMsg .
IP_RECEIVE_BROADCAST yes yes DWORD (booleano) Consente o blocca la ricezione della trasmissione.
IP_RECVIF yes yes DWORD (booleano) Indica se lo stack IP deve popolare il buffer di controllo con informazioni dettagliate sull'interfaccia che ha ricevuto un pacchetto con un socket di datagrammi. Quando questo valore è true, la funzione LPFN_WSARECVMSG (WSARecvMsg) restituirà dati di controllo facoltativi contenenti l'interfaccia in cui è stato ricevuto il pacchetto per i socket del datagram. Questa opzione consente la restituzione del pacchetto nell'interfaccia IPv4 nella struttura WSAMSG. Questa opzione è valida solo per datagrammi e socket non elaborati (il tipo di socket deve essere SOCK_DGRAM o SOCK_RAW).
IP_RECVTOS yes yes DWORD (booleano) Indica se lo stack IP deve popolare il buffer di controllo con un messaggio contenente il campo di intestazione IPv4 Type of Service (TOS) in un datagram ricevuto. Quando questo valore è true, la funzione LPFN_WSARECVMSG (WSARecvMsg) restituirà dati di controllo facoltativi contenenti il valore del campo di intestazione TOS IPv4 del datagram ricevuto. Questa opzione consente di restituire il campo di intestazione TOS IPv4 del datagramma ricevuto nella struttura WSAMSG. Il tipo di messaggio restituito verrà IP_TOS. Verranno restituiti tutti i bit DSCP e ECN del campo TOS. Questa opzione è valida solo nei socket del datagramma (il tipo di socket deve essere SOCK_DGRAM).
IP_RECVECN yes yes DWORD (booleano) Indica se lo stack IP deve popolare il buffer di controllo con un messaggio contenente i bit ECN del campo di intestazione IPv4 Type of Service (TOS) in un datagram ricevuto. Quando questo valore è true, la funzione LPFN_WSARECVMSG (WSARecvMsg) restituirà i dati di controllo facoltativi contenenti i bit ECN del valore del campo di intestazione TOS IPv4 del datagram ricevuto. Questa opzione consente di restituire i bit ECN del campo di intestazione TOS IPv4 del datagramma ricevuto nella struttura WSAMSG. Il tipo di messaggio restituito verrà IP_ECN. Verranno restituiti tutti i 2 bit ECN del campo TOS. Questa opzione è valida solo per datagrammi e socket non elaborati (il tipo di socket deve essere SOCK_DGRAM o SOCK_RAW). Per la sicurezza dei tipi, è consigliabile usare le funzioni WSAGetRecvIPEcn e WSASetRecvIPEcn anziché usare direttamente l'opzione socket.
IP_RECVTTL yes yes DWORD (booleano) Indica che le informazioni sull'hop (TTL) devono essere restituite nella funzione LPFN_WSARECVMSG (WSARecvMsg). Se optval è impostato su 1 nella chiamata a setsockopt, l'opzione è abilitata. Se impostato su 0, l'opzione è disabilitata. Questa opzione è valida solo per datagrammi e socket non elaborati (il tipo di socket deve essere SOCK_DGRAM o SOCK_RAW).
IP_TOS yes yes DWORD (booleano) Non utilizzare. Le impostazioni del tipo di servizio (TOS) devono essere impostate solo usando l'API Qualità del servizio. Per altre informazioni, vedere Servizi differenziati nella sezione Qualità del servizio di Platform SDK.
IP_TTL yes yes DWORD (booleano) Modifica il valore predefinito impostato dal provider di servizi TCP/IP nel campo TTL dell'intestazione IP nei datagrammi in uscita. IP_TTL non è necessario il supporto; per verificare se IP_TTL è supportato, usare getsockopt per ottenere le opzioni correnti. Se getsockopt ha esito negativo, IP_TTL non è supportato.
IP_UNBLOCK_SOURCE yes ip_mreq_source Aggiunge l'origine specificata come mittente al gruppo e all'interfaccia multicast forniti.
IP_UNICAST_IF yes yes DWORD (IF_INDEX) Ottiene o imposta l'interfaccia in uscita per l'invio del traffico IPv4. Questa opzione non modifica l'interfaccia predefinita per la ricezione del traffico IPv4. Questa opzione è importante per i computer multihomed. Il valore di input per l'impostazione di questa opzione è un indirizzo IPv4 a 4 byte nell'ordine dei byte di rete. Questo parametro DWORD deve essere un indice di interfaccia nell'ordine dei byte di rete. Qualsiasi indirizzo IP nel blocco 0.x.x.x (primo ottetto di 0) ad eccezione dell'indirizzo IPv4 0.0.0.0 viene considerato come indice di interfaccia. Un indice di interfaccia è un numero a 24 bit e il blocco di indirizzi IPv4 0.0.0.0/8 non viene usato (questo intervallo è riservato). L'indice dell'interfaccia può essere usato per specificare l'interfaccia predefinita per l'invio del traffico per IPv4. La funzione GetAdaptersAddresses può essere usata per ottenere le informazioni sull'indice dell'interfaccia. Se optval è zero , l'interfaccia predefinita per l'invio del traffico viene impostata su non specificato. Quando si ottiene questa opzione, optval restituisce l'indice di interfaccia predefinito corrente per l'invio del traffico IPv4 nell'ordine dei byte host.
IP_USER_MTU yes yes DWORD Ottiene o imposta un limite superiore sul MTU del livello IP (in byte) per il socket specificato. Se il valore è superiore alla stima del percorso MTU (che è possibile recuperare su un socket connesso eseguendo una query sull'opzione socket IP_MTU ), l'opzione non ha alcun effetto. Se il valore è inferiore, i pacchetti in uscita maggiori di questo verranno frammentati o non verranno inviati, a seconda del valore di IP_DONTFRAGMENT. Il valore predefinito è IP_UNSPECIFIED_USER_MTU (MAXULONG). Per la sicurezza dei tipi, è consigliabile usare le funzioni WSAGetIPUserMtu e WSASetIPUserMtu anziché usare direttamente l'opzione socket.
IP_WFP_REDIRECT_CONTEXT yes yes WSACMSGHDR con dati di controllo Tipo di dati ausiliario del socket datagram (cmsg_type) per indicare il contesto di reindirizzamento per un socket UDP usato da un servizio di reindirizzamento di Windows Filtering Platform (WFP) in modalità utente.
IP_WFP_REDIRECT_RECORDS yes yes WSACMSGHDR con dati di controllo Tipo di dati ausiliario del socket datagram (cmsg_type) per indicare il record di reindirizzamento per un socket UDP usato da un servizio di reindirizzamento di Windows Filtering Platform (WFP) in modalità utente.

Supporto di Windows per le opzioni di IP_PROTO

Opzione Windows 10 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ADD_IFLIST A partire da Windows 10, versione 1803
IP_ADD_MEMBERSHIP yes yes
IP_ADD_SOURCE_MEMBERSHIP yes yes
IP_BLOCK_SOURCE yes yes
IP_DEL_IFLIST A partire da Windows 10, versione 1803
IP_DONTFRAGMENT yes yes
IP_DROP_MEMBERSHIP yes yes
IP_DROP_SOURCE_MEMBERSHIP yes yes
IP_GET_IFLIST A partire da Windows 10, versione 1803
IP_HDRINCL yes yes
IP_IFLIST A partire da Windows 10, versione 1803
IP_MULTICAST_IF yes yes
IP_MULTICAST_LOOP yes yes
IP_MULTICAST_TTL yes yes
IP_OPTIONS yes yes
IP_ORIGINAL_ARRIVAL_IF yes yes
IP_PKTINFO yes yes
IP_RECEIVE_BROADCAST yes yes
IP_RECVIF A partire da Windows 10, versione 1703 yes yes
IP_RECVTTL yes
IP_TOS yes yes
IP_TTL yes yes
IP_UNBLOCK_SOURCE yes yes
IP_UNICAST_IF yes yes
IP_WFP_REDIRECT_CONTEXT yes yes
IP_WFP_REDIRECT_RECORDS yes yes

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

Osservazioni:

In Microsoft Windows Software Development Kit (SDK) rilasciato per Windows Vista e versioni successive, l'organizzazione dei file di intestazione è stata modificata e IPPROTO_IP livello è definito nel file di intestazione Ws2def.h , incluso automaticamente nel file di intestazione Winsock2.h . Alcune delle opzioni socket IPPROTO_IP sono definite nel file di intestazione Ws2ipdef.h , incluso automaticamente dal file di intestazione Ws2tcpip.h . Le opzioni socket rimanenti IPPROTO_IP sono definite nel file di intestazione Wsipv6ok.h , incluso automaticamente dal file di intestazione Winsock2.h . I file di intestazione Ws2def.h, Ws2ipdef.h e Wsipv6ok.h non devono mai essere usati direttamente.

In Platform SDK rilasciato per Windows Server 2003 e Windows XP, il livello di IPPROTO_IP viene definito nel file di intestazione Winsock2.h . Alcune delle opzioni socket IPPROTO_IP sono definite nel file di intestazione Ws2tcpip.h . Le opzioni socket rimanenti IPPROTO_IP sono definite nel file di intestazione Wsipv6ok.h , incluso automaticamente dal file di intestazione Winsock2.h . Il file di intestazione Wsipv6ok.h non deve mai essere usato direttamente.

Requisiti

Requisito Valore
Intestazione
Ws2def.h (include Winsock2.h);
Ws2ipdef.h (include Ws2tcpip.h);
Wsipv6ok.h (include Winsock2.h)