Condividi tramite


Funzione di callback LPWSPBIND (ws2spi.h)

La funzione LPWSPBind associa un indirizzo locale (ovvero il nome) a un socket.

Sintassi

LPWSPBIND Lpwspbind;

int Lpwspbind(
  [in]  SOCKET s,
  [in]  const sockaddr *name,
  [in]  int namelen,
  [out] LPINT lpErrno
)
{...}

Parametri

[in] s

Descrittore che identifica un socket non associato.

[in] name

Indirizzo da assegnare al socket, sotto forma di struttura sockaddr .

Ad eccezione del membro sa_family , il contenuto di sockaddr viene espresso in ordine di byte di rete. In Windows Sockets 2 il parametro name non viene interpretato rigorosamente come puntatore a una struttura sockaddr . Viene eseguito il cast in questo modo per la compatibilità winsock. La struttura effettiva viene interpretata in modo diverso nel contesto di diverse famiglie di indirizzi. Gli unici requisiti sono che il primo u_short è la famiglia di indirizzi e la dimensione totale del buffer di memoria, in byte, è namelen.

[in] namelen

Lunghezza, in byte, della struttura a cui punta il parametro name .

[out] lpErrno

Puntatore al codice di errore.

Valore restituito

Se non si verifica alcun errore, LPWSPBind restituisce zero. In caso contrario, restituisce SOCKET_ERROR e un codice di errore specifico è disponibile in lpErrno.

Codice di errore Significato
WSAENETDOWN
Il sottosistema di rete non è riuscito.
WSAEADDRINUSE
Alcuni processi nel computer locale sono già associati allo stesso indirizzo completo (ad esempio, indirizzo IP e porta nel caso **AF_INET**) e il socket non è stato contrassegnato per consentire il riutilizzo degli indirizzi con SO_REUSEADDR. Vedere l'opzione socket SO_REUSEADDR in LPWSPSetSockOpt.
WSAEADDRNOTAVAIL
L'indirizzo specificato non è un indirizzo valido per il computer.
WSAEFAULT
Il nome o il parametro namelen non è una parte valida dello spazio indirizzi utente, il parametro namelen è troppo piccolo, il parametro name contiene un formato di indirizzo non corretto per la famiglia di indirizzi associata o i primi due byte del blocco di memoria specificato dal nome non corrispondono alla famiglia di indirizzi associata al descrittore del socket.
WSAEINPROGRESS
La funzione viene richiamata quando è in corso un callback.
WSAEINVAL
Il socket è già associato a un indirizzo.
WSAENOBUFS
Non sono disponibili buffer sufficienti, ci sono troppe connessioni.
WSAENOTSOCK
Il descrittore non è un socket.

Commenti

La funzione LPWSPBind viene usata in un socket senza connessione o orientata alla connessione, prima delle chiamate successive alle funzioni LPWSPConnect o LPWSPListen . Quando un socket viene creato con LPWSPSocket, esiste in uno spazio dei nomi (famiglia di indirizzi), ma non ha alcun nome o indirizzo locale assegnato. La funzione LPWSPBind stabilisce l'associazione locale del socket assegnando un nome locale a un socket senza nome.

Ad esempio, nella famiglia di indirizzi Internet, un nome è costituito da tre parti: la famiglia di indirizzi, un indirizzo host e un numero di porta che identifica il client SPI Winsock. In Windows Sockets 2 il parametro name non viene interpretato rigorosamente come puntatore a una struttura sockaddr . I provider di servizi sono liberi di considerarlo come puntatore a un blocco di memoria di size namelen. I primi due byte in questo blocco (corrispondente a sa_family nella dichiarazione sockaddr ) devono contenere la famiglia di indirizzi usata per creare il socket. In caso contrario, verrà indicato l'errore WSAEFAULT .

Se a un client SPI Windows Sockets 2 non interessa l'indirizzo locale assegnato, specifica il valore costante del manifesto ADDR_ANY per il membro sa_data del parametro name . Indica al provider di servizi di usare qualsiasi indirizzo di rete appropriato. Per TCP/IP, se la porta è specificata come zero, il provider di servizi assegnerà una porta univoca al client SPI Winsock con un valore compreso tra 1024 e 5000. Il client SPI può usare LPWSPGetSockName dopo LPWSPBind per apprendere l'indirizzo e la porta assegnata. Tuttavia, si noti che se l'indirizzo Internet è uguale a INADDR_ANY, LPWSPGetSockOpt non sarà necessariamente in grado di fornire l'indirizzo finché il socket non è connesso, poiché diversi indirizzi possono essere validi se l'host è multihomed.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Intestazione ws2spi.h

Vedi anche

sockaddr

LPWSPConnect

LPWSPGetSockName

LPWSPListen

WSPSetSockOpt

LPWSPSocket