Funzione di callback LPWSPSELECT (ws2spi.h)
La funzione LPWSPSelect
Sintassi
LPWSPSELECT Lpwspselect;
int Lpwspselect(
[in] int nfds,
[in, out] fd_set *readfds,
[in, out] fd_set *writefds,
[in, out] fd_set *exceptfds,
[in] const timeval *timeout,
[out] LPINT lpErrno
)
{...}
Parametri
[in] nfds
Ignorato e incluso solo per motivi di compatibilità.
[in, out] readfds
Puntatore facoltativo a un set di socket da verificare per la leggibilità.
[in, out] writefds
Puntatore facoltativo a un set di socket da controllare per la scrittura.
[in, out] exceptfds
Puntatore facoltativo a un set di socket da controllare per la presenza di errori.
[in] timeout
Tempo massimo di attesa
[out] lpErrno
Puntatore al codice di errore.
Valore restituito
La funzione LPWSPSelect restituisce il numero totale di descrittori pronti e contenuti nelle strutture fd_set o SOCKET_ERROR se si è verificato un errore. Se il valore restituito è SOCKET_ERROR, è disponibile un codice di errore specifico in lpErrno.
Codice errore | Significato |
---|---|
Il provider di servizi Windows Sockets non è riuscito ad allocare risorse necessarie per le operazioni interne oppure i readfds, writefds, exceptfds o parametri timeval non fanno parte dello spazio indirizzi utente. | |
Il sottosistema di rete non è riuscito. | |
Il valore di timeout |
|
La chiamata di blocco è stata annullata tramite LPWSPCancelBlockingCall. | |
Il blocco della chiamata a Windows Sockets è in corso oppure il provider di servizi sta ancora elaborando una funzione di callback. | |
Uno dei set di descrittori contiene una voce che non è un socket. |
Osservazioni
Questa funzione viene usata per determinare lo stato di uno o più socket. Per ogni socket, il chiamante può richiedere informazioni sullo stato di lettura, scrittura o errore. Il set di socket per cui viene richiesto uno stato specificato è indicato da una struttura di fd_set. Tutte le voci di un
Il parametro readfds identifica i socket da controllare per la leggibilità. Se il socket è attualmente in ascolto tramite LPWSPListen, verrà contrassegnato come leggibile se è stata ricevuta una richiesta di connessione in ingresso, in modo che una LPWSPAccept sia garantita senza blocco. Per altri socket, la leggibilità indica che i dati in coda sono disponibili per la lettura, in modo che non sia garantito che un
Per i socket orientati alla connessione, la leggibilità può anche indicare che una richiesta di chiusura è stata ricevuta dal peer. Se il circuito virtuale è stato chiuso normalmente, un LPWSPRecv restituirà immediatamente con zero byte letti. Se il circuito virtuale è stato reimpostato, un LPWSPRecv verrà completato immediatamente con un codice di errore, ad esempio WSAECONNRESET. La presenza di dati OOB verrà verificata se l'opzione socket SO_OOBINLINE è stata abilitata (vedere LPWSPSetSockOpt).
Il parametro writefds identifica i socket da controllare per la scrittura:
- Se un socket si connette tramite LPWSPConnect, la scrittura indica che la connessione è stata completata correttamente.
- Se il socket non è in fase di ascolto tramite LPWSPConnect, la scrittura significa che un LPWSPSend o LPWSPSendTo è garantito un esito positivo.
Tuttavia, possono bloccarsi su un socket di blocco se il len supera la quantità di spazio del buffer di sistema in uscita disponibile. Non è specificato per quanto tempo queste garanzie possono essere valide, in particolare in un ambiente multithreading.
Il parametro exceptfds identifica i socket da controllare per la presenza di dati OOB o di eventuali condizioni di errore eccezionali. Si noti che i dati OOB verranno segnalati in questo modo solo se l'opzione SO_OOBINLINE è FALSE. Se un socket esegue una connessione LPWSPConnect (non bloccante), l'errore del tentativo di connessione viene indicato in exceptfds. Questa specifica non definisce quali altri errori verranno inclusi.
Due readfds, writefdso exceptfds possono essere forniti come null se non è necessario verificare la condizione di interesse. Almeno uno deve essere diverso danulle qualsiasiset di descrittori Null deve contenere almeno un descrittore socket.
Riepilogo: un socket verrà identificato in un determinato set quando LPWSPSelect restituisce in base alle condizioni seguenti.
Parametro | Descrizione |
---|---|
readfds: | Se viene chiamato LPWSPListen, una connessione è in sospeso, LPWSPAccept avrà esito positivo. I dati sono disponibili per la lettura (include i dati OOB se SO_OOBINLINE è abilitato). La connessione è stata chiusa,reimpostata/terminata. |
writefds: | Se LPWSPConnect (nonblocking), la connessione è riuscita. I dati possono essere inviati. |
exceptfds: | Se LPWSPConnect (nonblocking), il tentativo di connessione non è riuscito. I dati OOB sono disponibili per la lettura (solo se SO_OOBINLINE è disabilitato). |
Nel file di intestazione Ws2spi.h vengono definite tre macro e una funzione upcall per la modifica e il controllo dei set di descrittori. La variabile FD_SETSIZE determina il numero massimo di descrittori in un set. Il valore predefinito di FD_SETSIZE è 64, che può essere modificato da #defining FD_SETSIZE a un altro valore prima di #including Ws2spi.h. Internamente, gli handle socket in un fd_set non sono rappresentati come flag di bit come in Berkeley UNIX. La rappresentazione dei dati è opaca. L'uso di queste macro manterrà la portabilità software tra ambienti socket diversi.
Le macro da modificare e controllare fd_set contenuto sono:
-
FD_CLR(, *impostato)
-
Rimuove l' del descrittore
da impostato . -
FD_SET(, *impostato)
-
Aggiunge il descrittore a impostare.
-
FD_ZERO(* impostata ) -
Inizializza la
impostata sul set di null.
La funzione upcall usata per verificare l'appartenenza è:
-
intWPUFDIsSet (SOCKET, FD_SET FAR *impostato);
-
che restituirà un valore diverso da zero se è un membro del impostato o in caso contrario zero.
Il parametro timeout controlla per quanto tempo il LPWSPSelect può richiedere il completamento. Se
Nota
La funzione LPWSPSelect
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 2000 Professional [solo app desktop] |
server minimo supportato | Windows 2000 Server [solo app desktop] |
intestazione |
ws2spi.h |