Share via


WSAAsyncSelect-Funktion (winsock2.h)

[Die WSAAsyncSelect-Funktion ist für die Verwendung in den Betriebssystemen verfügbar, die im Abschnitt Anforderungen angegeben sind. Es kann in nachfolgenden Versionen geändert oder entfernt werden. Verwenden Sie anstelle der E/A-E/A-Formatauswahl überlappende E/A- und Ereignisobjekte mit WinSock2.]

Die WSAAsyncSelect-Funktion fordert windows-nachrichtenbasierte Benachrichtigungen über Netzwerkereignisse für einen Socket an.

Syntax

int WSAAPI WSAAsyncSelect(
  [in] SOCKET s,
  [in] HWND   hWnd,
  [in] u_int  wMsg,
  [in] long   lEvent
);

Parameter

[in] s

Ein Deskriptor, der den Socket identifiziert, für den eine Ereignisbenachrichtigung erforderlich ist.

[in] hWnd

Ein Handle, das das Fenster identifiziert, das eine Nachricht empfängt, wenn ein Netzwerkereignis auftritt.

[in] wMsg

Eine Nachricht, die empfangen werden soll, wenn ein Netzwerkereignis auftritt.

[in] lEvent

Eine Bitmaske, die eine Kombination von Netzwerkereignissen angibt, an denen die Anwendung interessiert ist.

Rückgabewert

Wenn die WSAAsyncSelect-Funktion erfolgreich ist, ist der Rückgabewert 0, vorausgesetzt, die Interessendeklaration der Anwendung im Netzwerkereignissatz war erfolgreich. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und eine bestimmte Fehlernummer kann durch Aufrufen von WSAGetLastError abgerufen werden.

Fehlercode Bedeutung
WSANOTINITIALISIERT
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen.
WSAENETDOWN
Fehler beim Netzwerksubsystem.
WSAEINVAL
Einer der angegebenen Parameter war ungültig, z. B. das Fensterhandle, das nicht auf ein vorhandenes Fenster verweist, oder der angegebene Socket befindet sich in einem ungültigen Zustand.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion.
WSAENOTSOCK
Der Deskriptor ist kein Socket.
 

Zusätzliche Fehlercodes können festgelegt werden, wenn ein Anwendungsfenster eine Nachricht empfängt. Dieser Fehlercode wird mithilfe des WSAGETSELECTERROR-Makros aus dem lParam in der Antwortnachricht extrahiert. Mögliche Fehlercodes für jedes Netzwerkereignis sind in der folgenden Tabelle aufgeführt.

Ereignis: FD_CONNECT

Fehlercode Bedeutung
WSAEAFNOSUPPORT Adressen in der angegebenen Adressfamilie können nicht mit diesem Socket verwendet werden.
WSAECONNREFUSED Der Verbindungsversuch wurde abgelehnt.
WSAENETUNREACH Das Netzwerk kann von diesem Host zurzeit nicht erreicht werden.
WSAEFAULT Der namelen-Parameter ist ungültig.
WSAEINVAL Der Socket ist bereits an eine Adresse gebunden.
WSAEISCONN Der Socket ist bereits verbunden.
WSAEMFILE Es sind keine Dateideskriptoren mehr verfügbar.
WSAENOBUFS Es ist kein Pufferplatz verfügbar. Der Socket kann nicht verbunden werden.
WSAENOTCONN Der Socket ist nicht verbunden.
WSAETIMEDOUT Versuchen Sie, eine Verbindung mit einem Timeout herzustellen, ohne eine Verbindung herzustellen.
 

Ereignis: FD_CLOSE

Fehlercode Bedeutung
WSAENETDOWN Fehler beim Netzwerksubsystem.
WSAECONNRESET Die Verbindung wurde von der Remoteseite zurückgesetzt.
WSAECONNABORTED Die Verbindung wurde aufgrund eines Timeouts oder eines anderen Fehlers beendet.
 
Fehlercode Bedeutung
WSAENETDOWN Fehler beim Netzwerksubsystem.
 

Ereignis: FD_ROUTING_INTERFACE_CHANGE

Fehlercode Bedeutung
WSAENETUNREACH Das angegebene Ziel ist nicht mehr erreichbar.
WSAENETDOWN Fehler beim Netzwerksubsystem.

Hinweise

Die WSAAsyncSelect-Funktion wird verwendet, um anzufordern, dass WS2_32.DLL eine Nachricht an das Fenster "hWnd " senden soll, wenn ein durch den lEvent-Parameter angegebenes Netzwerkereignis erkannt wird. Die Nachricht, die gesendet werden soll, wird durch den wMsg-Parameter angegeben. Der Socket, für den eine Benachrichtigung erforderlich ist, wird durch den s-Parameter identifiziert.

Die WSAAsyncSelect-Funktion legt Sockets unabhängig vom Wert von lEvent automatisch auf den Nichtblockierungsmodus fest. Um Sockets wieder in den Blockmodus zu versetzen, muss zunächst der Ereignisdatensatz gelöscht werden, der Socket s zugeordnet ist, über einen Aufruf von WSAAsyncSelect , wobei lEvent auf null festgelegt ist. Sie können dann ioctlsocket oder WSAIoctl aufrufen, um den Socket wieder in den Blockiermodus zu versetzen. Weitere Informationen zum Zurücksetzen des nicht blockierenden Sockets auf den Blockiermodus finden Sie in den Funktionen ioctlsocket und WSAIoctl .

Der lEvent-Parameter wird mithilfe des bitweisen OR-Operators mit einem beliebigen Wert erstellt, der in der folgenden Tabelle aufgeführt ist.

Wert Bedeutung
FD_READ Legen Sie fest, um eine Benachrichtigung über die Lesebereitschaft zu erhalten.
FD_WRITE Möchte eine Benachrichtigung über die Schreibbereitschaft erhalten.
FD_OOB Möchte eine Benachrichtigung über das Eintreffen von OOB-Daten erhalten.
FD_ACCEPT Möchte Benachrichtigungen über eingehende Verbindungen erhalten.
FD_CONNECT Möchte Benachrichtigungen über abgeschlossene Verbindungs- oder Mehrpunktbeitrittsvorgänge erhalten.
FD_CLOSE Möchte eine Benachrichtigung über den Socketverschluss erhalten.
FD_QOS Möchte Benachrichtigungen über QoS-Änderungen (Quality of Service) des Sockets erhalten.
FD_GROUP_QOS Möchte Benachrichtigungen über Änderungen der Socketgruppe Quality of Service (QoS) erhalten (reserviert für die zukünftige Verwendung mit Socketgruppen). Reserviert.
FD_ROUTING_INTERFACE_CHANGE Möchte Benachrichtigungen über Änderungen der Routingschnittstelle für die angegebenen Ziele erhalten.
FD_ADDRESS_LIST_CHANGE Möchte Benachrichtigungen über Änderungen der lokalen Adressliste für die Socketprotokollfamilie erhalten.
 

Wenn Sie einen WSAAsyncSelect für einen Socket ausgeben, werden alle vorherigen WSAAsyncSelect - oder WSAEventSelect-Instanzen für denselben Socket abgebrochen. Um beispielsweise Benachrichtigungen zum Lesen und Schreiben zu erhalten, muss die Anwendung WSAAsyncSelect mit FD_READ und FD_WRITE wie folgt aufrufen:

rc = WSAAsyncSelect(s, hWnd, wMsg, FD_READ|FD_WRITE);

Es ist nicht möglich, unterschiedliche Nachrichten für verschiedene Ereignisse anzugeben. Der folgende Code funktioniert nicht. Der zweite Aufruf bricht die Auswirkungen des ersten ab, und nur FD_WRITE Ereignisse werden mit der Meldung wMsg2 gemeldet:

rc = WSAAsyncSelect(s, hWnd, wMsg1, FD_READ);
rc = WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE);

Um alle Benachrichtigungen abzubrechen, die darauf hinweisen, dass Windows Sockets keine weiteren Nachrichten im Zusammenhang mit Netzwerkereignissen auf dem Socket senden sollen, wird lEvent auf 0 festgelegt.

rc = WSAAsyncSelect(s, hWnd, 0, 0);

Obwohl WSAAsyncSelect die Veröffentlichung von Ereignismeldungen für den Socket in diesem instance sofort deaktiviert, ist es möglich, dass Nachrichten in der Anwendungsnachrichtenwarteschlange warten. Daher muss die Anwendung darauf vorbereitet sein, Netzwerkereignisnachrichten auch nach dem Abbruch zu empfangen. Wenn Sie einen Socket mit closesocket schließen, wird auch das Senden von WSAAsyncSelect-Nachrichten abgebrochen, aber die gleiche Einschränkung für Nachrichten in der Warteschlange gilt weiterhin.

Der socket, der von der Accept-Funktion erstellt wurde, verfügt über die gleichen Eigenschaften wie der Zuhörsocket, mit dem er akzeptiert wird. Folglich gelten WSAAsyncSelect-Ereignisse , die für den Abhörsocket festgelegt sind, auch für den akzeptierten Socket. Wenn ein Abhörsocket z. B. über WSAAsyncSelect-EreignisseFD_ACCEPT, FD_READ und FD_WRITE verfügt, weist jeder socket, der auf diesem Überwachungssocket akzeptiert wird, auch FD_ACCEPT-, FD_READ- und FD_WRITE-Ereignisse mit demselben wMsg-Wert auf, der für Nachrichten verwendet wird. Wenn ein anderes wMsg oder andere Ereignisse gewünscht werden, sollte die Anwendung WSAAsyncSelect aufrufen und den akzeptierten Socket und die gewünschten neuen Daten übergeben.

Wenn eines der nominierten Netzwerkereignisse auf den angegebenen Sockets auftritt, empfängt das Anwendungsfenster hWnd die Meldung wMsg. Der wParam-Parameter identifiziert den Socket, für den ein Netzwerkereignis aufgetreten ist. Das niedrige Wort lParam gibt das aufgetretene Netzwerkereignis an. Das hohe Wort von lParam enthält einen beliebigen Fehlercode. Der Fehlercode ist ein beliebiger Fehler, der in Winsock2.h definiert ist.

Hinweis Nach Erhalt einer Ereignisbenachrichtigung kann die WSAGetLastError-Funktion nicht zum Überprüfen des Fehlerwerts verwendet werden, da der zurückgegebene Fehlerwert vom Wert im hohen Wort "lParam" abweichen kann.
 
Die Fehler- und Ereigniscodes können aus dem lParam mithilfe der Makros WSAGETSELECTERROR und WSAGETSELECTEVENT extrahiert werden, die in Winsock2.h als definiert sind:
#include <windows.h>

#define WSAGETSELECTEVENT(lParam)       LOWORD(lParam)
#define WSAGETSELECTERROR(lParam)       HIWORD(lParam)

Die Verwendung dieser Makros maximiert die Portabilität des Quellcodes für die Anwendung.

Die möglichen Netzwerkereigniscodes, die zurückgegeben werden können, sind in der folgenden Tabelle aufgeführt.

Wert Bedeutung
FD_READ Sockets zum Lesen bereit.
FD_WRITE Sockets zum Schreiben bereit.
FD_OOB OOB-Daten, die für das Lesen von Sockets bereit sind
FD_ACCEPT Sockets bereit für die Annahme einer neuen eingehenden Verbindung.
FD_CONNECT Verbindungs- oder Mehrpunktverbindungsvorgang , der für Sockets initiiert wurde, wurde abgeschlossen.
FD_CLOSE Die durch Socket s identifizierte Verbindung wurde geschlossen.
FD_QOS Die Mit Socket s verknüpfte Dienstqualität hat sich geändert.
FD_GROUP_QOS Reserviert. Die Dienstqualität, die der Socketgruppe zugeordnet ist, zu der s gehört, wurde geändert (für die zukünftige Verwendung mit Socketgruppen reserviert).
FD_ROUTING_INTERFACE_CHANGE Die lokale Schnittstelle, die zum Senden an das angegebene Ziel verwendet werden soll, wurde geändert.
FD_ADDRESS_LIST_CHANGE Die Liste der Adressen der Socketprotokollfamilie, an die der Anwendungsclient gebunden werden kann, wurde geändert.
 

Obwohl WSAAsyncSelect mit Interesse an mehreren Ereignissen aufgerufen werden kann, erhält das Anwendungsfenster eine einzelne Nachricht für jedes Netzwerkereignis.

Wie bei der Select-Funktion wird WSAAsyncSelect häufig verwendet, um zu bestimmen, wann ein Datenübertragungsvorgang (senden oder recv) mit der Erwartung eines sofortigen Erfolgs ausgegeben werden kann. Dennoch muss eine robuste Anwendung darauf vorbereitet sein, dass sie eine Nachricht empfangen und einen Windows Sockets 2-Aufruf ausgeben kann, der WSAEWOULDBLOCK sofort zurückgibt. Beispielsweise ist die folgende Abfolge von Ereignissen möglich:

  1. Daten werden in Sockets eintreffen; Windows Sockets 2-Beiträge WSAAsyncNachricht auswählen
  2. Anwendung verarbeitet eine andere Meldung
  3. Während der Verarbeitung gibt die Anwendung ein aus ioctlsocket(s, FIONREAD...) und stellt fest, dass Daten zum Lesen bereit sind.
  4. Anwendung gibt eine recv(s,...) aus, um die Daten zu lesen.
  5. Anwendungsschleifen zum Verarbeiten der nächsten Nachricht, die schließlich die WSAAsyncSelect-Nachricht erreichen, die angibt, dass Die Daten zum Lesen bereit sind
  6. Anwendungsprobleme recv(s,...), die mit dem Fehler WSAEWOULDBLOCK fehlschlägt.
Auch andere Sequenzen sind möglich.

Die WS2_32.DLL überflutet eine Anwendung nicht kontinuierlich mit Nachrichten für ein bestimmtes Netzwerkereignis. Nachdem die Benachrichtigung über ein bestimmtes Ereignis erfolgreich an ein Anwendungsfenster gesendet wurde, werden keine weiteren Nachrichten für dieses Netzwerkereignis an das Anwendungsfenster gesendet, bis die Anwendung den Funktionsaufruf ausgibt, der implizit die Benachrichtigung zu diesem Netzwerkereignis wieder aktiviert.

Ereignis Funktion "Reenabling"
FD_READ recv, recvfrom, WSARecv oder WSARecvFrom.
FD_WRITE send, sendto, WSASend oder WSASendTo.
FD_OOB recv, recvfrom, WSARecv oder WSARecvFrom.
FD_ACCEPT accept oder WSAAccept , es sei denn, der Fehlercode ist WSATRY_AGAIN , der angibt, dass die Bedingungsfunktion CF_DEFER zurückgegeben hat.
FD_CONNECT Keine.
FD_CLOSE Keine.
FD_QOS WSAIoctl mit befehl SIO_GET_QOS.
FD_GROUP_QOS Reserviert. WSAIoctl mit Befehl SIO_GET_GROUP_QOS (für die zukünftige Verwendung mit Socketgruppen reserviert).
FD_ROUTING_INTERFACE_CHANGE WSAIoctl mit befehl SIO_ROUTING_INTERFACE_CHANGE.
FD_ADDRESS_LIST_CHANGE WSAIoctl mit Befehl SIO_ADDRESS_LIST_CHANGE.
 

Jeder Aufruf der Wiederholungsroutine, auch wenn ein Fehler auftritt, führt zu einer erneuten Veröffentlichung von Nachrichten für das entsprechende Ereignis.

Für FD_READ-, FD_OOB- und FD_ACCEPT-Ereignisse wird die Nachrichtenveröffentlichung auf ebener Ebene ausgelöst. Dies bedeutet, dass eine WSAAsyncSelect-Nachricht an die Anwendung gesendet wird, wenn die Wiederholungsroutine aufgerufen wird und die entsprechende Bedingung nach dem Aufruf weiterhin erfüllt ist. Dies ermöglicht es einer Anwendung, ereignisgesteuert zu sein und sich nicht um die Menge an Daten zu kümmern, die gleichzeitig eintreffen. Gehen Sie dabei von der folgenden Abfolge aus:

  1. Der Netzwerktransportstapel empfängt 100 Bytes Daten auf Sockets und bewirkt, dass Windows Sockets 2 eine FD_READ Nachricht postet.
  2. Die Anwendung gibt recv( s, buffptr, 50, 0) aus, um 50 Bytes zu lesen.
  3. Eine weitere FD_READ Nachricht wird gepostet, da noch Daten gelesen werden müssen.
Mit dieser Semantik muss eine Anwendung nicht alle verfügbaren Daten als Reaktion auf eine FD_READ Nachricht lesen . Für jede FD_READ Nachricht ist ein einzelner Recv geeignet. Wenn eine Anwendung als Reaktion auf eine einzelne FD_READ mehrere Recv-Aufrufe ausgibt, kann sie mehrere FD_READ-Nachrichten empfangen. Eine solche Anwendung kann das Deaktivieren FD_READ Nachrichten vor dem Starten der recv-Aufrufe erfordern, indem WSAAsyncSelect aufgerufen wird, wobei das FD_READ-Ereignis nicht festgelegt ist.

Die FD_QOS - und FD_GROUP_QOS-Ereignisse gelten als Edgeauslösung. Eine Nachricht wird genau einmal gesendet, wenn eine Qualitätsänderung des Diensts auftritt. Weitere Meldungen werden erst ausgegeben, wenn der Anbieter eine weitere Änderung der Dienstqualität erkennt oder die Anwendung die Dienstqualität für den Socket neu aushandelt.

Die FD_ROUTING_INTERFACE_CHANGE Meldung wird gesendet, wenn die lokale Schnittstelle, die verwendet werden soll, um das in WSAIoctl angegebene Ziel mit SIO_ROUTING_INTERFACE_CHANGE Änderungen zu erreichen, nachdem eine solche IOCTL ausgestellt wurde.

Die FD_ADDRESS_LIST_CHANGE-Nachricht wird gesendet, wenn die Liste der Adressen, an die die Anwendung Änderungen binden kann, nachdem WSAIoctl mit SIO_ADDRESS_LIST_CHANGE ausgestellt wurde.

Wenn ein Ereignis aufgetreten ist, wenn die Anwendung WSAAsyncSelect aufruft oder wenn die Funktion zum erneuten Abschreiben aufgerufen wird, wird eine entsprechende Nachricht gesendet. Betrachten Sie z. B. folgendes Szenario:

  1. Eine Anwendung ruft listen auf.
  2. Eine Verbindungsanforderung wird empfangen, aber noch nicht akzeptiert.
  3. Die Anwendung ruft WSAAsyncSelect auf und gibt an, dass FD_ACCEPT Nachrichten für den Socket empfangen werden müssen. Aufgrund der Persistenz von Ereignissen sendet Windows Sockets 2 sofort eine FD_ACCEPT Nachricht.
Das FD_WRITE-Ereignis wird etwas anders behandelt. Eine FD_WRITE Meldung wird gesendet, wenn ein Socket zuerst mit connect oder WSAConnect verbunden ist (nach FD_CONNECT, falls auch registriert) oder mit accept oder WSAAccept akzeptiert wird, und dann, nachdem ein Sendevorgang mit WSAEWOULDBLOCK fehlschlägt und Pufferspeicher verfügbar wird. Daher kann eine Anwendung davon ausgehen, dass Absendungen ab der ersten FD_WRITE Nachricht möglich sind, bis ein Send WSAEWOULDBLOCK zurückgibt. Nach einem solchen Fehler wird die Anwendung benachrichtigt, dass Senden mit einer FD_WRITE Nachricht wieder möglich sind.

Das FD_OOB-Ereignis wird nur verwendet, wenn ein Socket für den separaten Empfang von OOB-Daten konfiguriert ist. Wenn der Socket für den Inlineempfang von OOB-Daten konfiguriert ist, werden die OOB-Daten (expedited) wie normale Daten behandelt, und die Anwendung sollte ein Interesse an ereignissen registrieren und empfängt FD_READ Ereignisse, nicht FD_OOB Ereignisse. Eine Anwendung kann festlegen oder überprüfen, wie OOB-Daten behandelt werden sollen, indem sie setsockopt oder getsockopt für die option SO_OOBINLINE verwendet.

Der Fehlercode in einer FD_CLOSE Meldung gibt an, ob der Socket geschlossen oder abgebrochen wurde. Wenn der Fehlercode null ist, war das Schließen ordnungsgemäß; Wenn der Fehlercode WSAECONNRESET lautet, wurde die virtuelle Verbindung des Sockets zurückgesetzt. Dies gilt nur für verbindungsorientierte Sockets wie SOCK_STREAM.

Die FD_CLOSE Meldung wird gesendet, wenn für die virtuelle Verbindung, die dem Socket entspricht, ein Close-Hinweis empfangen wird. In TCP bedeutet dies, dass die FD_CLOSE gesendet wird, wenn die Verbindung in den Status TIME WAIT oder CLOSE WAIT wechselt. Dies ergibt sich daraus, dass das Remote-End ein Herunterfahren auf der Sendeseite oder ein Closesocket durchführt. FD_CLOSE sollte erst bereitgestellt werden, nachdem alle Daten aus einem Socket gelesen wurden, aber eine Anwendung sollte nach Erhalt der FD_CLOSE auf verbleibende Daten überprüfen, um jegliche Möglichkeit des Datenverlusts zu vermeiden.

Beachten Sie, dass die Anwendung nur eine FD_CLOSE-Meldung erhält, die das Schließen einer virtuellen Verbindung angibt, und nur, wenn alle empfangenen Daten gelesen wurden, wenn dies ein ordnungsgemäßer Abschluss ist. Es wird keine FD_READ-Nachricht empfangen, die diese Bedingung angibt.

Die FD_QOS oder FD_GROUP_QOS Meldung wird gesendet, wenn sich ein Parameter in der Flowspezifikation geändert hat, der Sockets oder der Socketgruppe zugeordnet ist, zu der s gehört. Anwendungen sollten WSAIoctl mit Befehl SIO_GET_QOS oder SIO_GET_GROUP_QOS verwenden, um die aktuelle Dienstqualität für Sockets bzw . für die Socketgruppe zu erhalten, zu der s gehört.

Die ereignisse FD_ROUTING_INTERFACE_CHANGE und FD_ADDRESS_LIST_CHANGE werden ebenfalls als edgeauslöst betrachtet. Eine Nachricht wird genau dann gesendet, wenn eine Änderung eintritt, nachdem die Anwendung die Benachrichtigung angefordert hat, indem WSAIoctl mit SIO_ROUTING_INTERFACE_CHANGE oder SIO_ADDRESS_LIST_CHANGE entsprechend ausgegeben wird. Weitere Meldungen werden erst angezeigt, wenn die Anwendung die IOCTL erneut ausstellt und eine weitere Änderung erkannt wird, da die IOCTL ausgestellt wurde.

Hier ist eine Zusammenfassung der Ereignisse und Bedingungen für jede asynchrone Benachrichtigung.

  • FD_READ:
    1. Wenn WSAAsyncSelect aufgerufen wird, wenn derzeit Daten zum Empfangen verfügbar sind.
    2. Wenn Daten eingehen, wenn FD_READ noch nicht bereitgestellt wurde.
    3. Nachdem recv oder recvfrom aufgerufen wurde, mit oder ohne MSG_PEEK), wenn noch Daten zum Empfangen verfügbar sind.
      Hinweis Wenn setsockopt SO_OOBINLINE aktiviert ist, umfassen Daten sowohl normale Daten als auch OOB-Daten in den oben genannten Instanzen.
       
  • FD_WRITE:
    1. Wenn WSAAsyncSelect aufgerufen wird, wenn ein send oder sendto möglich ist.
    2. Nach dem Herstellen einer Verbindung oderbeim Herstellen der Verbindung wird eine Akzeptiert-Verbindung aufgerufen.
    3. Nach dem Senden oder Senden an schlägt WSAEWOULDBLOCK fehl, wenn sendoder sendto wahrscheinlich erfolgreich ist.
    4. Nach der Bindung an einen verbindungslosen Socket. FD_WRITE kann zu diesem Zeitpunkt auftreten oder nicht (implementierungsabhängig). In jedem Fall ist ein verbindungsloser Socket immer unmittelbar nach einem Bindungsvorgang beschreibbar.
  • FD_OOB: Nur gültig, wenn setsockopt SO_OOBINLINE deaktiviert ist (Standard).
    1. Wenn WSAAsyncSelect aufgerufen wird, wenn derzeit OOB-Daten mit dem MSG_OOB-Flag empfangen werden können.
    2. Wenn OOB-Daten eingehen, wenn FD_OOB noch nicht veröffentlicht.
    3. Nach dem Aufruf von recv oder recvfrom mit oder ohne MSG_OOB Flag, wenn OOB-Daten noch zum Empfangen verfügbar sind.
  • FD_ACCEPT:
    1. Wenn WSAAsyncSelect aufgerufen wurde, wenn derzeit eine Verbindungsanforderung zur Annahme verfügbar ist.
    2. Wenn eine Verbindungsanforderung eingeht, wenn FD_ACCEPT noch nicht veröffentlicht.
    3. Nach dem Aufruf von accept , wenn eine andere Verbindungsanforderung zur Annahme verfügbar ist.
  • FD_CONNECT:
    1. Wenn WSAAsyncSelect aufgerufen wird, wenn derzeit eine Verbindung hergestellt wurde.
    2. Nach dem Aufrufen der Verbindung , wenn die Verbindung hergestellt wird, auch wenn die Verbindung sofort erfolgreich ist, wie es bei einem Datagrammsocket üblich ist.
    3. Nach dem Aufrufen von WSAJoinLeaf, wenn der Joinvorgang abgeschlossen ist.
    4. Nach der Verbindung wurde WSAConnect oder WSAJoinLeaf mit einem nicht blockierenden, verbindungsorientierten Socket aufgerufen. Der anfängliche Vorgang wurde mit einem bestimmten Fehler von WSAEWOULDBLOCK zurückgegeben, aber der Netzwerkvorgang wurde ausgeführt. Ob der Vorgang letztendlich erfolgreich ist oder nicht, wenn das Ergebnis bestimmt wurde, geschieht FD_CONNECT . Der Client sollte den Fehlercode überprüfen, um festzustellen, ob das Ergebnis erfolgreich war oder fehlgeschlagen ist.
  • FD_CLOSE: Nur für verbindungsorientierte Sockets gültig (z. B. SOCK_STREAM)
    1. Wenn WSAAsyncSelect aufgerufen wurde, wenn die Socketverbindung geschlossen wurde.
    2. Nach dem ordnungsgemäßen Schließen durch das Remotesystem, wenn derzeit keine Daten zum Empfangen verfügbar sind (Beachten Sie, dass die FD_CLOSE erst übermittelt wird, wenn daten empfangen wurden und darauf warten, gelesen zu werden, wenn das Remotesystem eine ordnungsgemäße Schließung initiiert.
    3. Nachdem das lokale System eine ordnungsgemäße Schließung mit Herunterfahren initiiert hat und das Remotesystem mit der Benachrichtigung "Ende der Daten" geantwortet hat (z. B. TCP FIN), wenn derzeit keine Daten zum Empfangen verfügbar sind.
    4. Wenn das Remotesystem die Verbindung beendet (z. B. tcp RST gesendet), und lParam enthält den WSAECONNRESET-Fehlerwert .
      Beachten SieFD_CLOSE nach dem Aufruf von Closesocket nicht gepostet wird.
       
  • FD_QOS:
    1. Wenn WSAAsyncSelect aufgerufen wird, wenn die Dienstqualität, die dem Socket zugeordnet ist, geändert wurde.
    2. Nach WSAIoctl mit SIO_GET_QOS aufgerufen, wenn die Dienstqualität geändert wird.
  • FD_GROUP_QOS: Reserviert.
  • FD_ROUTING_INTERFACE_CHANGE:
    • Nach WSAIoctl mit SIO_ROUTING_INTERFACE_CHANGE aufgerufen, wenn sich die lokale Schnittstelle ändert, die zum Erreichen des in der IOCTL angegebenen Ziels verwendet werden soll.
  • FD_ADDRESS_LIST_CHANGE:
    • Nach WSAIoctl mit SIO_ADDRESS_LIST_CHANGE aufgerufen, wenn die Liste der lokalen Adressen, an die die Anwendung gebunden werden kann, Änderungen ändert.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winsock2.h (Winsock2.h einschließen)
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

WSAEventSelect

Winsock-Funktionen

Winsock-Referenz

select