Condividi tramite


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;

Membri

dwServiceFlags1

Tipo: DWORD

Maschera di bit che descrive i servizi forniti dal protocollo. I valori possibili per questo membro vengono definiti nel file di intestazione Winsock2.h.

Sono possibili i valori seguenti.

Valore Significato
XP1_CONNECTIONLESS
0x00000001
Fornisce un servizio senza connessione (datagram). Se non è impostato, il protocollo supporta il trasferimento dei dati orientato alla connessione.
XP1_GUARANTEED_DELIVERY
0x00000002
Garantisce che tutti i dati inviati raggiungano la destinazione prevista.
XP1_GUARANTEED_ORDER
0x00000004
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 sono stati inviati.
XP1_MESSAGE_ORIENTED
0x00000008
Rispetta i limiti dei messaggi, invece di un protocollo orientato al flusso in cui non esiste alcun concetto di limiti dei messaggi.
XP1_PSEUDO_STREAM
0x00000010
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.
XP1_GRACEFUL_CLOSE
0x00000020
Supporta la chiusura in due fasi (normale). Se non è impostato, vengono eseguite solo le chiusura interrotte.
XP1_EXPEDITED_DATA
0x00000040
Supporta i dati accelerati (urgenti).
XP1_CONNECT_DATA
0x00000080
Supporta i dati di connessione.
XP1_DISCONNECT_DATA
0x00000100
Supporta i dati di disconnessione.
XP1_SUPPORT_BROADCAST
0x00000200
Supporta un meccanismo di trasmissione.
XP1_SUPPORT_MULTIPOINT
0x00000400
Supporta un meccanismo multipoint o multicast. Gli attributi del piano dati e di controllo sono indicati di seguito.
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
Indica se il piano di controllo è rooted (valore = 1) o nonrooted (valore = 0).
XP1_MULTIPOINT_DATA_PLANE
0x00001000
Indica se il piano dati è rooted (valore = 1) o nonrooted (valore = 0).
XP1_QOS_SUPPORTED
0x00002000
Supporta la qualità delle richieste di servizio.
XP1_INTERRUPT
Il bit è riservato.
XP1_UNI_SEND
0x00008000
Il protocollo è unidirezionale nella direzione di invio.
XP1_UNI_RECV
0x00010000
Il protocollo è unidirezionale nella direzione recv.
XP1_IFS_HANDLES
0x00020000
I descrittori socket restituiti dal provider sono handle IFS (Installable File System) del sistema operativo.
XP1_PARTIAL_MESSAGE
0x00040000
Il flag MSG_PARTIAL è supportato in WSASend e WSASendTo.
XP1_SAN_SUPPORT_SDP
0x00080000
Il protocollo fornisce il supporto per SAN.

Questo valore è supportato in Windows 7 e Windows Server 2008 R2.

 
Nota è possibile impostare solo uno dei valori di XP1_UNI_SEND o XP1_UNI_RECV. Se un protocollo può essere unidirezionale in entrambe le direzioni, è necessario usare due strutture WSAPROTOCOL_INFOW. Quando nessuno dei due bit viene impostato, il protocollo viene considerato bidirezionale.
 

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 sul modo in cui questo protocollo è rappresentato nel catalogo Winsock. I valori possibili per questo membro vengono definiti nel file di intestazione Winsock2.h.

Sono possibili i valori del flag seguenti.

Valore Significato
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
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 ai flussi.
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
Indica che si tratta della voce consigliata o usata più di frequente per un protocollo in grado di implementare più comportamenti.
PFL_HIDDEN
0x00000004
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.
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
Indica che un valore pari a zero nel parametro del protocollo di socket o WSASocket corrisponde a questa voce di protocollo.
PFL_NETWORKDIRECT_PROVIDER
0x00000010
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 non essere distinguibili.

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 come bordi superiore che inferiore. Se la lunghezza della catena è uguale a 1, questa voce rappresenta un protocollo di base il cui identificatore di voce di 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 terminando 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 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.

In Windows SDK rilasciato per Windows Vista e versioni successive, i valori possibili per la famiglia di indirizzi sono definiti nel file di intestazione Ws2def.h. Si noti che il file di intestazione Ws2def.h viene incluso automaticamente in Winsock2.he 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 di 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
AF_INET
2
Famiglia di indirizzi IPv4 (Internet Protocol versione 4).
AF_IPX
6
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.

AF_APPLETALK
16
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.

AF_NETBIOS
17
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 tipo parametro è 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.

AF_INET6
23
Famiglia di indirizzi IPv6 (Internet Protocol versione 6).
AF_IRDA
26
Famiglia di indirizzi IrDA (Infrared Data Association).

Questa famiglia di indirizzi è supportata solo se nel computer è installata una porta a infrarossi e un driver.

AF_BTH
32
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, espressa in byte.

iMinSockAddr

Tipo: int

Lunghezza minima dell'indirizzo, espressa in byte.

iSocketType

Tipo: int

Valore da passare come parametro di tipo socket al socket o funzione di 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
SOCK_STREAM
1
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).
SOCK_DGRAM
2
Tipo di socket che supporta i datagrammi, che non sono collegati, buffer non affidabili di 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).
SOCK_RAW
3
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 socket IP_HDRINCL sul socket. Per modificare l'intestazione IPv6, è necessario impostare l'opzione socket IPV6_HDRINCL sul socket.
SOCK_RDM
4
Tipo di socket che fornisce un datagramma di messaggi affidabile. Un esempio di questo tipo è l'implementazione del protocollo multicast pgm (Pragmatic General Multicast) in Windows, spesso definita programmazione multicast affidabile.

Questo valore è supportato solo se è installato il protocollo Reliable Multicast.

SOCK_SEQPACKET
5
Tipo di socket che fornisce un pacchetto pseudo-flusso basato su datagrammi.

iProtocol

Tipo: int

Valore da passare come parametro del protocollo al socket o funzione di WSASocket per aprire un socket per questo protocollo. Le opzioni possibili per il membro iProtocol sono specifiche per la famiglia di indirizzi e il tipo di socket specificati.

In 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.he 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 i iProtocol anche se sono possibili molti altri valori.

iProtocol Significato
IPPROTO_ICMP
1
Protocollo ICMP (Internet Control Message Protocol).

Questo valore è supportato in Windows XP e versioni successive.

IPPROTO_IGMP
2
Protocollo IGMP (Internet Group Management Protocol).

Questo valore è supportato in Windows XP e versioni successive.

BTHPROTO_RFCOMM
3
Protocollo Bluetooth Radio Frequency Communications (Bluetooth RFCOMM).

Questo valore è supportato in Windows XP con SP2 o versione successiva.

IPPROTO_TCP
6
Tcp (Transmission Control Protocol).
IPPROTO_UDP
17
Protocollo UDP (User Datagram Protocol).
IPPROTO_ICMPV6
58
Internet Control Message Protocol versione 6 (ICMPv6).

Questo valore è supportato in Windows XP e versioni successive.

IPPROTO_RM
113
Protocollo PGM per multicast affidabile. In Windows SDK rilasciato per Windows Vista e versioni successive, questo protocollo viene chiamato anche IPPROTO_PGM.

Questo valore è supportato solo se è installato il protocollo Reliable Multicast.

iProtocolMaxOffset

Tipo: int

Valore massimo che può essere aggiunto a iProtocol quando si specifica un valore per il parametro del protocollo per socket o funzione WSASocket. Non tutti i protocolli consentono un intervallo di valori. Quando questo è il 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 utilizzato (se presente). Il valore SECURITY_PROTOCOL_NONE (0) viene usato per i protocolli che non includono le disposizioni di sicurezza.

dwMessageSize

Tipo: DWORD

Dimensione massima del messaggio, in byte, supportata dal protocollo. Si tratta delle dimensioni massime che è possibile inviare da qualsiasi interfaccia locale dell'host. Per i protocolli che non supportano il frame dei messaggi, il valore massimo effettivo che può essere inviato a un determinato indirizzo può essere minore. Non è previsto alcun provisioning standard per determinare la dimensione massima dei messaggi in ingresso. Vengono definiti i valori speciali seguenti.

Valore Significato
0
Il protocollo è orientato al flusso e quindi il concetto di dimensione del messaggio non è rilevante.
0x1
Le dimensioni massime dei messaggi in uscita (invio) dipendono dalla MTU di rete sottostante (unità di trasmissione con 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.
0xFFFFFFFF
Il protocollo è orientato ai messaggi, ma non esiste alcun limite massimo per le 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.

Osservazioni

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 del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows 2000 Professional [solo app desktop]
server minimo supportato Windows 2000 Server [solo app desktop]
intestazione winsock2.h

Vedere anche

WSAEnumProtocols

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFOW

WSASend

WSASendTo

WSASocket

WSCInstallProvider

WSCInstallProvider64_32

WSCUpdateProvider

WSCUpdateProvider32

getsockopt

socket