PFN_WSK_ACCEPT funzione di callback (wsk.h)
La funzione WskAccept accetta una connessione in ingresso in un socket in ascolto.
Sintassi
PFN_WSK_ACCEPT PfnWskAccept;
NTSTATUS PfnWskAccept(
[in] PWSK_SOCKET ListenSocket,
ULONG Flags,
[in, optional] PVOID AcceptSocketContext,
[in, optional] const WSK_CLIENT_CONNECTION_DISPATCH *AcceptSocketDispatch,
[out, optional] PSOCKADDR LocalAddress,
[out, optional] PSOCKADDR RemoteAddress,
[in, out] PIRP Irp
)
{...}
Parametri
[in] ListenSocket
Puntatore a una struttura WSK_SOCKET che specifica l'oggetto socket per il socket in ascolto o il socket di flusso che viene controllato per una connessione in ingresso.
Flags
Questo parametro è riservato per l'uso del sistema. Un'applicazione WSK deve impostare questo parametro su zero.
[in, optional] AcceptSocketContext
Puntatore a un contesto fornito dal chiamante per il socket che viene accettato. Il sottosistema WSK passa questo puntatore alle funzioni di callback degli eventi del socket accettato. Le informazioni sul contesto sono opache per il sottosistema WSK. Le informazioni sul contesto devono essere archiviate in memoria non a pagina. Se l'applicazione WSK non abilita alcuna funzione di callback eventi nel socket accettato, deve impostare questo puntatore su NULL.
[in, optional] AcceptSocketDispatch
Puntatore a una costante WSK_CLIENT_CONNECTION_DISPATCH struttura. Questa struttura è una tabella di invio che contiene puntatori alle funzioni di callback dell'evento per il socket accettato. Se l'applicazione WSK non abilita tutte le funzioni di callback eventi per il socket accettato, deve impostare i puntatori nella tabella dispatch su NULL per tali funzioni di callback evento che non abilita. Se l'applicazione WSK non abilita alcuna funzione di callback eventi nel socket accettato, deve impostare questo puntatore su NULL.
[out, optional] LocalAddress
Puntatore a un buffer allocato dal chiamante che riceve l'indirizzo di trasporto locale in cui è arrivata la connessione in ingresso. Il buffer deve trovarsi nella memoria non a pagina. Il buffer deve anche essere abbastanza grande per contenere il tipo di struttura SOCKADDR specifico che corrisponde alla famiglia di indirizzi specificata dall'applicazione WSK quando ha creato il socket di ascolto. Questo puntatore è facoltativo e può essere NULL.
[out, optional] RemoteAddress
Puntatore a un buffer allocato del chiamante che riceve l'indirizzo di trasporto remoto da cui ha avuto origine la connessione in ingresso. Il buffer deve trovarsi nella memoria non a pagina. Il buffer deve anche essere abbastanza grande per contenere il tipo di struttura SOCKADDR specifico che corrisponde alla famiglia di indirizzi specificata dall'applicazione WSK quando ha creato il socket di ascolto. Questo puntatore è facoltativo e può essere NULL.
[in, out] Irp
Puntatore a un'IRP allocata dal chiamante che il sottosistema WSK usa per completare l'operazione di accettazione in modo asincrono. Per altre informazioni sull'uso di IRP con funzioni WSK, vedere Uso di IRP con Funzioni kernel Winsock.
Valore restituito
WskAccept restituisce uno dei codici NTSTATUS seguenti:
Codice restituito | Descrizione |
---|---|
|
È stata accettata una connessione in ingresso. L'IRP verrà completato con lo stato di esito positivo. |
|
L'IRP è stato accodato dal sottosistema WSK, in attesa di una connessione in ingresso nel socket in ascolto. |
|
Il socket non è più funzionale. L'IRP verrà completato con lo stato di errore. L'applicazione WSK deve chiamare la funzione WskCloseSocket per chiudere il socket il prima possibile. |
|
Si è verificato un errore. L'IRP verrà completato con lo stato di errore. |
Commenti
Un'applicazione WSK può chiamare la funzione WskAccept in un socket di ascolto o in un socket di flusso associato in precedenza a un indirizzo di trasporto locale chiamando la funzione WskBind .
Il comportamento della funzione WskAccept dipende dal fatto che una connessione in ingresso sia in attesa di essere accettata nel socket in ascolto:
- Se una connessione in ingresso è già arrivata sul socket di ascolto e deve essere accettata, la funzione WskAccept restituisce STATUS_SUCCESS. In questa situazione, l'IRP viene completato con lo stato di esito positivo e il campo IoStatus.Information dell'IRP contiene un puntatore all'oggetto socket per il socket accettato.
- Se una connessione in ingresso non è in attesa di essere accettata nel socket di ascolto, WskAccept restituisce STATUS_PENDING e il sottosistema WSK accoda l'IRP fino a quando non viene ricevuta una connessione in ingresso. Quando viene ricevuta una connessione in ingresso, il sottosistema WSK completa in modo asincrono l'IRP con stato di esito positivo. In questa situazione, il campo IoStatus.Information dell'IRP contiene un puntatore all'oggetto socket per il socket accettato.
Quando la funzione WskAccept accetta correttamente una connessione in ingresso, tutte le funzioni di callback dell'evento nel socket accettato sono disabilitate per impostazione predefinita. Per altre informazioni sull'abilitazione di una delle funzioni di callback degli eventi del socket accettato, vedere Abilitazione e disabilitazione delle funzioni di callback degli eventi.
Se un'applicazione WSK specifica un puntatore non NULL nel parametro LocalAddress, nel parametro RemoteAddress o in entrambi i parametri e se WskAccept restituisce STATUS_PENDING, i buffer a cui puntano tali parametri devono rimanere validi fino al completamento dell'IRP. Se l'applicazione WSK ha allocato i buffer con una delle funzioni ExAllocateXxx , non può liberare la memoria con la funzione ExFreeXxx corrispondente fino al completamento dell'IRP. Se l'applicazione WSK ha allocato i buffer nello stack, non può restituire dalla funzione che chiama la funzione WskAccept fino al completamento dell'IRP.
Il sottosistema WSK alloca la memoria per la struttura di oggetti socket ( WSK_SOCKET) per la connessione accettata per conto dell'applicazione WSK. Il sottosistema WSK dealloca questa memoria quando il socket viene chiuso.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows. |
Piattaforma di destinazione | Universale |
Intestazione | wsk.h (include Wsk.h) |
IRQL | <= DISPATCH_LEVEL |