Condividi tramite


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
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEAFNOSUPPORT
La famiglia di indirizzi specificata non è supportata.
WSAEINPROGRESS
Il blocco della chiamata a Windows Sockets è in corso oppure il provider di servizi sta ancora elaborando una funzione di callback.
WSAEMFILE
Descrittori di socket esauriti.
WSAENOBUFS
Nessuno spazio di buffer disponibile. Impossibile creare il socket.
WSAEPROTONOSUPPORT
Il protocollo specificato non è supportato.
WSAEPROTOTYPE
Il protocollo specificato è il tipo errato per questo socket.
WSAESOCKTNOSUPPORT
Il tipo di socket specificato non è supportato in questa famiglia di indirizzi.
WSAEINVAL
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

Vedi anche