struttura WSAPROTOCOL_INFOA (winsock2.h)
La struttura WSAPROTOCOL_INFO viene utilizzata per archiviare o recuperare informazioni complete per un determinato protocollo.
Sintassi
typedef struct _WSAPROTOCOL_INFOA {
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
CHAR szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOA, *LPWSAPROTOCOL_INFOA;
Members
dwServiceFlags1
Tipo: DWORD
Maschera di bit che descrive i servizi forniti dal protocollo. I valori possibili per questo membro sono definiti nel file di intestazione Winsock2.h .
I valori seguenti sono possibili.
Valore | Significato |
---|---|
|
Fornisce un servizio senza connessione (datagram). Se non impostato, il protocollo supporta il trasferimento dei dati orientato alla connessione. |
|
Garantisce che tutti i dati inviati raggiungano la destinazione prevista. |
|
Garantisce che i dati arrivino solo nell'ordine in cui sono stati inviati e che non siano duplicati. Questa caratteristica non significa necessariamente che i dati vengano sempre recapitati, ma che tutti i dati recapitati vengano recapitati nell'ordine in cui è stato inviato. |
|
Rispetta i limiti dei messaggi, invece di un protocollo orientato al flusso in cui non esiste alcun concetto di limiti dei messaggi. |
|
Un protocollo orientato ai messaggi, ma i limiti dei messaggi vengono ignorati per tutte le ricevute. Ciò è utile quando un'applicazione non desidera che il frame dei messaggi venga eseguito dal protocollo. |
|
Supporta la chiusura in due fasi (normale). Se non impostato, vengono eseguite solo le chiusura interrotte. |
|
Supporta i dati accelerati (urgenti). |
|
Supporta i dati di connessione. |
|
Supporta i dati di disconnessione. |
|
Supporta un meccanismo di trasmissione. |
|
Supporta un meccanismo multipoint o multicast. Gli attributi del piano dati e di controllo sono indicati di seguito. |
|
Indica se il piano di controllo è rooted (valore = 1) o nonrooted (valore = 0). |
|
Indica se il piano dati è rooted (valore = 1) o nonrooted (valore = 0). |
|
Supporta la qualità delle richieste di servizio. |
|
Il bit è riservato. |
|
Il protocollo è unidirezionale nella direzione di invio. |
|
Il protocollo è unidirezionale nella direzione recv. |
|
I descrittori socket restituiti dal provider sono handle IFS (Installable File System) del sistema operativo. |
|
Il flag MSG_PARTIAL è supportato in WSASend e WSASendTo. |
|
Il protocollo fornisce il supporto per SAN.
Questo valore è supportato in Windows 7 e Windows Server 2008 R2. |
dwServiceFlags2
Tipo: DWORD
Riservato per definizioni di attributi di protocollo aggiuntive.
dwServiceFlags3
Tipo: DWORD
Riservato per definizioni di attributi di protocollo aggiuntive.
dwServiceFlags4
Tipo: DWORD
Riservato per definizioni di attributi di protocollo aggiuntive.
dwProviderFlags
Tipo: DWORD
Set di flag che fornisce informazioni su come questo protocollo è rappresentato nel catalogo Winsock. I valori possibili per questo membro sono definiti nel file di intestazione Winsock2.h .
Sono possibili i valori del flag seguenti.
Valore | Significato |
---|---|
|
Indica che si tratta di una delle due o più voci per un singolo protocollo (da un determinato provider) in grado di implementare più comportamenti. Un esempio è SPX che, sul lato ricevente, può comportarsi come un protocollo orientato ai messaggi o orientato al flusso. |
|
Indica che si tratta della voce consigliata o usata più di frequente per un protocollo in grado di implementare più comportamenti. |
|
Impostato da un provider per indicare al Ws2_32.dll che questo protocollo non deve essere restituito nel buffer dei risultati generato da WSAEnumProtocols. Ovviamente, un'applicazione Windows Sockets 2 non dovrebbe mai vedere una voce con questo set di bit. |
|
Indica che un valore pari a zero nel parametro del protocollo di socket o WSASocket corrisponde a questa voce di protocollo. |
|
Impostato da un provider per indicare il supporto per l'accesso diretto alla rete.
Questo valore è supportato in Windows 7 e Windows Server 2008 R2. |
ProviderId
Tipo: GUID
Identificatore univoco globale (GUID) assegnato al provider dal fornitore del provider di servizi. Questo valore è utile per le istanze in cui più provider di servizi sono in grado di implementare un protocollo specifico. Un'applicazione può usare il membro ProviderId per distinguere tra provider che potrebbero altrimenti essere indistingubili.
dwCatalogEntryId
Tipo: DWORD
Identificatore univoco assegnato dal WS2_32.DLL per ogni struttura WSAPROTOCOL_INFO .
ProtocolChain
Tipo: WSAPROTOCOLCHAIN
Struttura WSAPROTOCOLCHAIN associata al protocollo. Se la lunghezza della catena è 0, questa voce WSAPROTOCOL_INFO rappresenta un protocollo a più livelli con Windows Sockets 2 SPI sia nei bordi superiore che inferiore. Se la lunghezza della catena è uguale a 1, questa voce rappresenta un protocollo di base il cui identificatore di voce del catalogo si trova nel membro dwCatalogEntryId della struttura WSAPROTOCOL_INFO . Se la lunghezza della catena è maggiore di 1, questa voce rappresenta una catena di protocolli costituita da uno o più protocolli a più livelli su un protocollo di base. Gli identificatori di voce del catalogo corrispondenti si trovano nella matrice ProtocolChain.ChainEntries a partire dal protocollo a più livelli nella parte superiore (l'elemento zero nella matrice ProtocolChain.ChainEntries) e terminano con il protocollo di base. Per altre informazioni sulle catene di protocolli, vedere la specifica dell'interfaccia del provider di servizi Windows Sockets 2.
iVersion
Tipo: int
Identificatore della versione del protocollo.
iAddressFamily
Tipo: int
Valore da passare come parametro della famiglia di indirizzi al socket o alla funzione WSASocket per aprire un socket per questo protocollo. Questo valore definisce anche in modo univoco la struttura di un indirizzo di protocollo per un sockaddr usato dal protocollo.
Nella Windows SDK rilasciata per Windows Vista e versioni successive, i valori possibili per la famiglia di indirizzi vengono definiti nel file di intestazione Ws2def.h. Si noti che il file di intestazione Ws2def.h viene automaticamente incluso in Winsock2.h e non deve mai essere usato direttamente.
Nelle versioni di Platform SDK per Windows Server 2003 e versioni precedenti, i valori possibili per la famiglia di indirizzi sono definiti nel file di intestazione Winsock2.h .
I valori attualmente supportati sono AF_INET o AF_INET6, ovvero i formati della famiglia di indirizzi Internet per IPv4 e IPv6. Altre opzioni per la famiglia di indirizzi (AF_NETBIOS per l'uso con NetBIOS, ad esempio) sono supportate se è installato un provider di servizi Windows Sockets per la famiglia di indirizzi. Si noti che i valori per la famiglia di indirizzi AF_ e le costanti della famiglia di protocolli PF_ sono identiche (ad esempio, AF_INET e PF_INET), in modo che sia possibile usare entrambe le costanti.
La tabella seguente elenca i valori comuni per la famiglia di indirizzi, anche se sono possibili molti altri valori.
iAddressFamily | Significato |
---|---|
|
Famiglia di indirizzi IPv4 (Internet Protocol versione 4). |
|
Famiglia di indirizzi IPX/SPX. Questa famiglia di indirizzi è supportata solo se è installato il protocollo di trasporto compatibile con NWLink IPX/SPX NetBIOS.
Questa famiglia di indirizzi non è supportata in Windows Vista e versioni successive. |
|
Famiglia di indirizzi AppleTalk. Questa famiglia di indirizzi è supportata solo se è installato il protocollo AppleTalk.
Questa famiglia di indirizzi non è supportata in Windows Vista e versioni successive. |
|
Famiglia di indirizzi NetBIOS. Questa famiglia di indirizzi è supportata solo se è installato il provider Windows Sockets per NetBIOS.
Il provider Windows Sockets per NetBIOS è supportato nelle versioni a 32 bit di Windows. Questo provider viene installato per impostazione predefinita nelle versioni a 32 bit di Windows. Il provider Windows Sockets per NetBIOS non è supportato nelle versioni a 64 bit di windows, tra cui Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 o Windows XP. Il provider Windows Sockets per NetBIOS supporta solo i socket in cui il parametro di tipo è impostato su SOCK_DGRAM. Il provider Windows Sockets per NetBIOS non è direttamente correlato all'interfaccia di programmazione NetBIOS . L'interfaccia di programmazione NetBIOS non è supportata in Windows Vista, Windows Server 2008 e versioni successive. |
|
Famiglia di indirizzi IPv6 (Internet Protocol versione 6). |
|
Famiglia di indirizzi IrDA (Infrared Data Association).
Questa famiglia di indirizzi è supportata solo se nel computer è installata una porta e un driver a infrarossi. |
|
Famiglia di indirizzi Bluetooth.
Questa famiglia di indirizzi è supportata in Windows XP con SP2 o versione successiva se nel computer è installata una scheda Bluetooth e un driver. |
iMaxSockAddr
Tipo: int
Lunghezza massima dell'indirizzo, in byte.
iMinSockAddr
Tipo: int
Lunghezza minima dell'indirizzo, in byte.
iSocketType
Tipo: int
Valore da passare come parametro di tipo socket al socket o alla funzione WSASocket per aprire un socket per questo protocollo. I valori possibili per il tipo di socket sono definiti nel file di intestazione Winsock2.h .
La tabella seguente elenca i valori possibili per il membro iSocketType supportato per Windows Sockets 2:
iSocketType | Significato |
---|---|
|
Tipo di socket che fornisce flussi di byte sequenziati, affidabili, bidirezionali e basati sulla connessione con un meccanismo di trasmissione dei dati OOB. Questo tipo di socket usa il protocollo TCP (Transmission Control Protocol) per la famiglia di indirizzi Internet (AF_INET o AF_INET6). |
|
Tipo di socket che supporta datagrammi, che non sono connectionless, buffer non affidabili di una lunghezza massima fissa (in genere piccola). Questo tipo di socket usa il protocollo UDP (User Datagram Protocol) per la famiglia di indirizzi Internet (AF_INET o AF_INET6). |
|
Tipo di socket che fornisce un socket non elaborato che consente a un'applicazione di modificare l'intestazione del protocollo superiore successiva. Per modificare l'intestazione IPv4, è necessario impostare l'opzione IP_HDRINCL socket sul socket. Per modificare l'intestazione IPv6, l'opzione socket IPV6_HDRINCL deve essere impostata sul socket. |
|
Tipo di socket che fornisce un datagramma di messaggi affidabile. Un esempio di questo tipo è l'implementazione del protocollo multicast generale pragmatico (PGM) in Windows, spesso definita programmazione multicast affidabile.
Questo valore è supportato solo se il protocollo Reliable Multicast è installato. |
|
Tipo di socket che fornisce un pacchetto di pseudo-flusso basato su datagrammi. |
iProtocol
Tipo: int
Valore da passare come parametro del protocollo alla funzione socket o WSASocket per aprire un socket per questo protocollo. Le possibili opzioni per il membro iProtocol sono specifiche della famiglia di indirizzi e del tipo socket specificato.
Nel Windows SDK rilasciato per Windows Vista e versioni successive, questo membro può essere uno dei valori del tipo di enumerazione IPPROTO definito nel file di intestazione Ws2def.h. Si noti che il file di intestazione Ws2def.h viene incluso automaticamente in Winsock2.h e non deve mai essere usato direttamente.
Nelle versioni di Platform SDK per Windows Server 2003 e versioni precedenti, i valori possibili per il membro iProtocol sono definiti nei file di intestazione Winsock2.h e Wsrm.h .
La tabella seguente elenca i valori comuni per iProtocol anche se sono possibili molti altri valori.
iProtocolMaxOffset
Tipo: int
Valore massimo che può essere aggiunto a iProtocol quando si specifica un valore per il parametro del protocollo al socket o alla funzione WSASocket . Non tutti i protocolli consentono un intervallo di valori. Quando si tratta del caso iProtocolMaxOffset è zero.
iNetworkByteOrder
Tipo: int
Attualmente questi valori sono costanti manifesto (BIGENDIAN e LITTLEENDIAN) che indicano rispettivamente big-endian o little-endian con i valori 0 e 1.
iSecurityScheme
Tipo: int
Tipo di schema di sicurezza impiegato (se presente). Un valore di SECURITY_PROTOCOL_NONE (0) viene usato per i protocolli che non incorporano le disposizioni di sicurezza.
dwMessageSize
Tipo: DWORD
Dimensioni massime dei messaggi, in byte, supportate dal protocollo. Questa è la dimensione massima che può essere inviata da una qualsiasi delle interfacce locali dell'host. Per i protocolli che non supportano il frame dei messaggi, il massimo effettivo che può essere inviato a un determinato indirizzo potrebbe essere minore. Non è disponibile alcun provisioning standard per determinare la dimensione massima del messaggio in ingresso. I valori speciali seguenti sono definiti.
Valore | Significato |
---|---|
|
Il protocollo è orientato al flusso e quindi il concetto di dimensione del messaggio non è pertinente. |
|
Le dimensioni massime dei messaggi in uscita (invio) dipendono dalla rete MTU sottostante (unità di trasmissione di dimensioni massime) e quindi non possono essere note fino a quando non viene associato un socket. Le applicazioni devono usare getsockopt per recuperare il valore di SO_MAX_MSG_SIZE dopo che il socket è stato associato a un indirizzo locale. |
|
Il protocollo è orientato ai messaggi, ma non esiste alcun limite massimo alle dimensioni dei messaggi che possono essere trasmessi. |
dwProviderReserved
Tipo: DWORD
Riservato per l'uso da parte dei provider di servizi.
szProtocol[WSAPROTOCOL_LEN + 1]
Tipo: TCHAR[WSAPROTOCOL_LEN+1]
Matrice di caratteri che contiene un nome leggibile che identifica il protocollo, ad esempio "MSAFD Tcpip [UDP/IP]". Il numero massimo di caratteri consentiti è WSAPROTOCOL_LEN, definito come 255.
Commenti
Nota
L'intestazione winsock2.h definisce WSAPROTOCOL_INFO come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Intestazione | winsock2.h |