Funzione di callback LPWSPSOCKET (ws2spi.h)
La funzione LPWSPSocket crea un socket. Per informazioni sulla parte eseguita da LPWSPSocket nella creazione di un socket condiviso, vedere Socket condivisi e socket condivisi in SPI.
Sintassi
LPWSPSOCKET Lpwspsocket;
SOCKET Lpwspsocket(
[in] int af,
[in] int type,
[in] int protocol,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[in] GROUP g,
DWORD dwFlags,
[out] LPINT lpErrno
)
{...}
Parametri
[in] af
Specifica della famiglia di indirizzi.
[in] type
Specifica del tipo per il nuovo socket.
[in] protocol
Protocollo da usare con il socket specifico della famiglia di indirizzi indicata.
[in] lpProtocolInfo
Puntatore a una struttura WSAProtocol_Info che definisce le caratteristiche del socket da creare.
[in] g
Riservato.
dwFlags
Specifica dell'attributo Socket.
[out] lpErrno
Puntatore al codice di errore.
Valore restituito
Se non si verifica alcun errore, LPWSPSocket restituisce un descrittore che fa riferimento al nuovo socket. In caso contrario, viene restituito un valore di INVALID_SOCKET e un codice di errore specifico è disponibile in lpErrno.
Codice di errore | Significato |
---|---|
Il sottosistema di rete non è riuscito. | |
La famiglia di indirizzi specificata non è supportata. | |
Il blocco della chiamata a Windows Sockets è in corso oppure il provider di servizi sta ancora elaborando una funzione di callback. | |
Descrittori di socket esauriti. | |
Nessuno spazio di buffer disponibile. Impossibile creare il socket. | |
Il protocollo specificato non è supportato. | |
Il protocollo specificato è il tipo errato per questo socket. | |
Il tipo di socket specificato non è supportato in questa famiglia di indirizzi. | |
Il parametro g specificato non è valido. |
Commenti
La funzione LPWSPSocket causa l'allocazione di un descrittore socket e di qualsiasi risorsa correlata. Per impostazione predefinita, il socket creato non avrà l'attributo sovrapposto. I provider di Windows Sockets sono invitati a essere realizzati come file system installabili da Windows e gli handle dei file di sistema vengono forniti come descrittori socket. Questi provider devono chiamare WPUModifyIFSHandle prima di restituire da questa funzione. Per i provider Windows Sockets non file system, WPUCreateSocketHandle deve essere usato per acquisire un descrittore socket univoco dal Ws2_32.dll prima di restituire da questa funzione. Vedere
Allocazione del descrittore per altre informazioni.
I valori per af, tipo e protocollo sono quelli forniti dall'applicazione nel socket delle funzioni API corrispondente o WSASocket. Un provider di servizi è libero di ignorare o prestare attenzione a qualsiasi o a tutti questi valori, come è appropriato per il protocollo specifico. Tuttavia, il provider deve essere disposto ad accettare il valore di zero per af e tipo, poiché il Ws2_32.dll considera che questi valori siano jolly. Inoltre, il valore della costante manifesto FROM_PROTOCOL_INFO deve essere accettato per uno qualsiasi di af, tipo e protocollo. Questo valore indica che l'applicazione Windows Sockets 2 deve usare i valori corrispondenti dalla struttura WSAProtocol_Info (iAddressFamily, iSocketType, iProtocol).
Il parametro dwFlags può essere usato per specificare gli attributi del socket usando l'operatore OR bit per bit con uno dei flag seguenti.
Contrassegno | Significato |
---|---|
WSA_FLAG_OVERLAPPED | Questo flag causa la creazione di un socket sovrapposto. I socket sovrapposti possono usare LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFrom e LPWSPIoctl per operazioni di I/O sovrapposte, che consentono l'avvio e l'elaborazione simultanea di più operazioni. Tutte le funzioni che consentono operazioni sovrapposte supportano anche l'utilizzo non sovrapposto su un socket sovrapposto se i valori per i parametri correlati all'operazione sovrapposta sono Null. |
WSA_FLAG_MULTIPOINT_C_ROOT | Indica che il socket creato sarà un c_root in una sessione multipoint. Consentito solo se un piano di controllo radice è indicato nella struttura di WSAProtocol_Info del protocollo. |
WSA_FLAG_MULTIPOINT_C_LEAF | Indica che il socket creato sarà un c_leaf in una sessione multicast. Consentito solo se XP1_SUPPORT_MULTIPOINT è indicato nella struttura WSAProtocol_Info del protocollo. |
WSA_FLAG_MULTIPOINT_D_ROOT | Indica che il socket creato sarà un d_root in una sessione multipoint. Consentito solo se un piano dati radice è indicato nella struttura di WSAProtocol_Info del protocollo. |
WSA_FLAG_MULTIPOINT_D_LEAF | Indica che il socket creato sarà un d_leaf in una sessione multipoint. Consentito solo se XP1_SUPPORT_MULTIPOINT è indicato nella struttura WSAProtocol_Info del protocollo. |
Nota
Per i socket multipoint, è necessario specificare esattamente un WSA_FLAG_MULTIPOINT_C_ROOT o WSA_FLAG_MULTIPOINT_C_LEAF e deve essere specificato esattamente uno dei WSA_FLAG_MULTIPOINT_D_ROOT o WSA_FLAG_MULTIPOINT_D_LEAF. Per altre informazioni, vedere Multicast indipendente dal protocollo e Multipoint in SPI .
I socket orientati alla connessione, ad esempio SOCK_STREAM forniscono connessioni full-duplex, e devono trovarsi in uno stato connesso prima che tutti i dati possano essere inviati o ricevuti su di essi. Viene creata una connessione a un altro socket con una chiamata LPWSPConnect . Una volta connessi, i dati possono essere trasferiti usando chiamate LPWSPSend e LPWSPRecv . Al termine di una sessione, è necessario eseguire un LPWSPCloseSocket .
I protocolli di comunicazione usati per implementare un socket affidabile e orientato alla connessione garantiscono che i dati non vengano persi o duplicati. Se i dati per cui il protocollo peer dispone di spazio buffer non possono essere trasmessi correttamente entro un periodo di tempo ragionevole, la connessione viene considerata interrotta e le chiamate successive avranno esito negativo con il codice di errore impostato su WSAETIMEDOUT.
I socket senza connessione e orientati ai messaggi consentono l'invio e la ricezione di datagrammi da e verso peer arbitrari usando LPWSPSendTo e LPWSPRecvFrom. Se tale socket è connesso tramite LPWSPConnect a un peer specifico, i datagrammi possono essere inviati al peer usando LPWSPSend e possono essere ricevuti solo da questo peer usando LPWSPRecv.
Il supporto per i socket con tipo SOCK RAW non è obbligatorio, ma i provider di servizi sono invitati a supportare socket non elaborati ogni volta che è opportuno farlo.
Un provider di servizi a livelli fornisce un'implementazione di questa funzione, ma è anche un client di questa funzione se e quando chiama LPWSPSocket del livello successivo nella catena di protocolli. Alcune considerazioni speciali si applicano al parametro lpProtocolInfo della funzione perché viene propagato verso il basso attraverso i livelli della catena di protocolli.
Se il livello successivo della catena di protocolli è un altro livello, quando viene chiamato LPWSPSocket del livello successivo, questo livello deve passare al livello successivo un lpProtocolInfo che fa riferimento alla stessa struttura non modificata WSAProtocol_Info con le stesse informazioni sulla catena non modificata. Tuttavia, se il livello successivo è il protocollo di base , ovvero l'ultimo elemento della catena, questo livello esegue una sostituzione quando si chiama LPWSPSocket del provider di base. In questo caso, la struttura di WSAPROTOCOL_INFO del provider di base deve essere a cui fa riferimento il parametro lpProtocolInfo .
Un vantaggio fondamentale di questa politica è che i provider di servizi di base non devono essere consapevoli delle catene di protocolli.
Questo stesso criterio di propagazione si applica quando si propaga una struttura WSAProtocol_Info tramite una sequenza di altre funzioni, ad esempio LPWSPAddressToString, LPWSPDuplicateSocket, WSPStartup o LPWSPStringToAddress.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | ws2spi.h |