WSAAsyncSelect-Funktion (winsock.h)

[Die WSAAsyncSelect-Funktion ist für die Verwendung in den im Abschnitt Anforderungen angegebenen Betriebssystemen verfügbar. Es kann in nachfolgenden Versionen geändert oder entfernt werden. Anstatt E/A-E/A im Select-Stil zu verwenden, verwenden Sie überlappende E/A- und Ereignisobjekte mit WinSock2.]

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

Syntax

int 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 (null), sofern die Deklaration des Interesses der Anwendung im Netzwerkereignissatz erfolgreich war. 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 noch eine Rückruffunktion.
WSAENOTSOCK
Der Deskriptor ist kein Socket.
 

Zusätzliche Fehlercodes können festgelegt werden, wenn ein Anwendungsfenster eine Meldung empfängt. Dieser Fehlercode wird mithilfe des WSAGETSELECTERROR-Makros aus 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 Versuch, eine Verbindung herzustellen, 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 Zeitüberschreitung beim Verbindungsversuch, 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 es ein netzwerkereignis erkennt, das durch den lEvent-Parameter angegeben 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 automatisch auf den Nichtblockierungsmodus fest, unabhängig vom Wert von lEvent. Um Sockets wieder auf den Blockierungsmodus zu setzen, müssen Sie zunächst den Ereignisdatensatz löschen, der Sockets 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 Blockierungsmodus zu versetzen. Weitere Informationen zum Zurücksetzen des nicht blockierenden Sockets auf den Blockierungsmodus finden Sie unter 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 Wird festgelegt, um eine Benachrichtigung über die Lesebereitschaft zu erhalten.
FD_WRITE Möchte eine Benachrichtigung über die Bereitschaft zum Schreiben erhalten.
FD_OOB Möchte eine Benachrichtigung über die Ankunft von OOB-Daten erhalten.
FD_ACCEPT Möchte eine Benachrichtigung über eingehende Verbindungen erhalten.
FD_CONNECT Möchte eine Benachrichtigung über den abgeschlossenen Verbindungs- oder Multipoint-Verknüpfungsvorgang erhalten.
FD_CLOSE Möchte eine Benachrichtigung über den Socketabschluss erhalten.
FD_QOS Möchte Benachrichtigungen über QoS-Änderungen (Quality of Service) des Sockets erhalten.
FD_GROUP_QOS Möchte eine Benachrichtigung über Änderungen der Socketgruppenqualität (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 sowohl mit FD_READ als auch mit FD_WRITE aufrufen, wie folgt:

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 angibt, dass Windows Sockets keine weiteren Nachrichten im Zusammenhang mit Netzwerkereignissen im Socket senden sollen, wird lEvent auf Null festgelegt.

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

Obwohl WSAAsyncSelect die Veröffentlichung von Ereignisnachrichten 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. Durch das Schließen eines Sockets mit closesocket wird auch das Senden von WSAAsyncSelect-Nachrichten abgebrochen, aber derselbe Vorbehalt für Nachrichten in der Warteschlange gilt weiterhin.

Der von der accept-Funktion erstellte Socket verfügt über die gleichen Eigenschaften wie der lauschende Socket, mit dem er akzeptiert wird. Folglich gelten WSAAsyncSelect-Ereignisse , die für den Lauschsocket festgelegt wurden, auch für den akzeptierten Socket. Wenn z. B. ein lauschende Socket über WSAAsyncSelect-EreignisseFD_ACCEPT, FD_READ und FD_WRITE verfügt, verfügt jeder auf diesem Lauschocket akzeptierte Socket auch über FD_ACCEPT-, FD_READ- und FD_WRITE-Ereignisse mit demselben wMsg-Wert , der für Nachrichten verwendet wird. Wenn ein anderes wMsg - oder -Ereignis gewünscht wird, sollte die Anwendung WSAAsyncSelect aufrufen und den akzeptierten Socket und die gewünschten neuen Daten übergeben.

Wenn eines der nominierten Netzwerkereignisse für die 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, wie in Winsock2.h definiert.

Hinweis Nach Erhalt einer Ereignisbenachrichtigung kann die WSAGetLastError-Funktion nicht verwendet werden, um den Fehlerwert zu überprüfen, da der zurückgegebene Fehlerwert vom Wert im hohen Wort lParam abweichen kann.
 
Die Fehler- und Ereigniscodes können mithilfe der Makros WSAGETSELECTERROR und WSAGETSELECTEVENT aus lParam extrahiert werden, die in Winsock2.h wie folgt 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 Mehrpunktbeitrittsvorgang , der für Sockets initiiert wurde, wurde abgeschlossen.
FD_CLOSE Die durch Sockets identifizierte Verbindung wurde geschlossen.
FD_QOS Die Dienstqualität, die Sockets zugeordnet ist, 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 binden kann, wurde geändert.
 

WSAAsyncSelect kann zwar mit Interesse an mehreren Ereignissen aufgerufen werden, das Anwendungsfenster erhält jedoch 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 auf die Möglichkeit vorbereitet sein, dass sie eine Nachricht empfangen und einen Windows Sockets 2-Aufruf ausgibt, der WSAEWOULDBLOCK sofort zurückgibt. Beispielsweise ist die folgende Abfolge von Ereignissen möglich:

  1. Daten werden in Sockets eintreffen; Windows Sockets 2 postet WSAAsyncSelect-Nachricht
  2. Anwendungsprozesse, eine andere Meldung
  3. Während der Verarbeitung gibt die Anwendung eine aus ioctlsocket(s, FIONREAD...) und stellt fest, dass Daten zum Lesen bereit sind.
  4. Die Anwendung gibt eine recv(s,...) aus, um die Daten zu lesen.
  5. Anwendungsschleifen zum Verarbeiten der nächsten Nachricht, die schließlich die WSAAsyncSelect-Meldung erreichen, die angibt, dass die Daten lesebereit 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 ständig 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 vornimmt, der die Benachrichtigung über dieses Netzwerkereignis implizit wieder aktiviert.

Ereignis Reenabling-Funktion
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 er fehlschlägt, führt zu einer erneuten Veröffentlichung der Nachricht für das relevante 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 relevante Bedingung nach dem Aufruf weiterhin erfüllt ist. Dies ermöglicht es einer Anwendung, ereignisgesteuert zu sein und sich nicht mit der Datenmenge zu befassen, die zu einem bestimmten Zeitpunkt eingeht. Gehen Sie dabei von der folgenden Abfolge aus:

  1. Der Netzwerktransportstapel empfängt 100 Byte 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– eine einzelne Recv-Antwort auf jede FD_READ Nachricht ist 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 die Deaktivierung FD_READ Nachrichten erfordern, bevor die recv-Aufrufe gestartet werden, indem WSAAsyncSelect aufgerufen wird, wobei das ereignis FD_READ nicht festgelegt ist.

Die ereignisse FD_QOS und FD_GROUP_QOS werden als edgeauslöst betrachtet. Eine Nachricht wird genau einmal veröffentlicht, wenn eine Änderung der Dienstqualität erfolgt. Weitere Meldungen werden erst angezeigt, wenn entweder der Anbieter eine weitere Änderung der Dienstqualität erkennt oder die Anwendung die Servicequalität für den Socket neu aushandelt.

Die FD_ROUTING_INTERFACE_CHANGE Nachricht 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 veröffentlicht, 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 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 Nachricht 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. Aus diesem Grund kann eine Anwendung davon ausgehen, dass Senden ab der ersten FD_WRITE Nachricht möglich sind und bis ein Senden WSAEWOULDBLOCK zurückgibt. Nach einem solchen Fehler wird die Anwendung benachrichtigt, dass das Senden wieder mit einer FD_WRITE Nachricht möglich ist.

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 Empfang von OOB-Daten inline konfiguriert ist, werden die OOB-Daten (expedited) wie normale Daten behandelt, und die Anwendung sollte ein Interesse an FD_READ Ereignissen registrieren und empfängt, nicht FD_OOB Ereignisse. Eine Anwendung kann festlegen oder überprüfen, wie OOB-Daten verarbeitet 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 schließen ordnungsgemäß oder abgebrochen war. Wenn der Fehlercode null ist, war der Schließen ordnungsgemäß; wenn der Fehlercode WSAECONNRESET ist, 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 eine Schließenanzeige für die virtuelle Verbindung empfangen wird, die dem Socket entspricht. 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 Remoteende ein Herunterfahren auf der Sendeseite oder ein Closesocket durchführt. FD_CLOSE sollte erst veröffentlicht werden, nachdem alle Daten aus einem Socket gelesen wurden, aber eine Anwendung sollte nach Erhalt der FD_CLOSE auf verbleibende Daten überprüfen, um den Verlust von Daten zu vermeiden.

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

Die FD_QOS - oder FD_GROUP_QOS-Nachricht wird gesendet, wenn sich ein Beliebiger Parameter in der Flussspezifikation geändert hat, der Socket s oder der Socketgruppe zugeordnet ist, zu der s gehört. Anwendungen sollten WSAIoctl mit dem 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 FD_ROUTING_INTERFACE_CHANGE - und FD_ADDRESS_LIST_CHANGE-Ereignisse gelten ebenfalls als Edgeauslösung. Eine Nachricht wird genau dann gesendet, wenn eine Änderung erfolgt, 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 finden Sie 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 eintreffen, wenn FD_READ noch nicht veröffentlicht wurde.
    3. Nachdem recv oder recvfrom aufgerufen wurde, mit oder ohne MSG_PEEK), wenn daten noch 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 hat, wenn ein Senden oder Senden möglich ist.
    2. Nachdem die Verbindung hergestellt oder akzeptiert wurde, wird beim Herstellen der Verbindung aufgerufen.
    3. Nach dem Senden oder Senden mitWSAEWOULDBLOCK schlägt ein Fehler fehl, wenn send oder sendto wahrscheinlich erfolgreich ist.
    4. Nach der Bindung an einen verbindungslosen Socket. FD_WRITE können zu diesem Zeitpunkt auftreten (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 wurde, wenn derzeit OOB-Daten zum Empfangen mit dem MSG_OOB-Flag verfügbar sind.
    2. Wenn OOB-Daten eintreffen, wenn FD_OOB noch nicht veröffentlicht.
    3. Nach recv oder recvfrom mit oder ohne MSG_OOB Flag aufgerufen, wenn OOB-Daten weiterhin zum Empfangen verfügbar sind.
  • FD_ACCEPT:
    1. Wenn WSAAsyncSelect aufgerufen hat, wenn derzeit eine Verbindungsanforderung zur Annahme verfügbar ist.
    2. Wenn eine Verbindungsanforderung eingeht, wenn FD_ACCEPT noch nicht veröffentlicht.
    3. Nachdem accept aufgerufen wurde, wenn eine andere Verbindungsanforderung zur Annahme verfügbar ist.
  • FD_CONNECT:
    1. Wenn WSAAsyncSelect aufgerufen wurde, 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 ermittelt wurde, geschieht FD_CONNECT . Der Client sollte den Fehlercode überprüfen, um festzustellen, ob das Ergebnis erfolgreich war oder nicht erfolgreich war.
  • FD_CLOSE: Nur gültig für verbindungsorientierte Sockets (z. B. SOCK_STREAM)
    1. Wenn WSAAsyncSelect aufgerufen wurde, wenn die Socketverbindung geschlossen wurde.
    2. Nach dem vom Remotesystem initiierten ordnungsgemäßen Schließen, wenn derzeit keine Daten zum Empfangen verfügbar sind (Beachten Sie, dass die FD_CLOSE erst übermittelt wird, wenn alle ausstehenden Daten gelesen wurden und auf das Lesen warten, wenn das Remotesystem eine ordnungsgemäße Schließung initiiert).
    3. Nachdem das lokale System das ordnungsgemäße Schließen beim Herunterfahren initiiert hat und das Remotesystem mit einer "Datenende"-Benachrichtigung (z. B. TCP FIN) reagiert hat, 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 veröffentlicht wird.
       
  • FD_QOS:
    1. Wenn WSAAsyncSelect aufgerufen wurde, 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 verwendet werden soll, um das im IOCTL angegebene Ziel zu erreichen.
  • FD_ADDRESS_LIST_CHANGE:
    • Nach WSAIoctl mit SIO_ADDRESS_LIST_CHANGE aufgerufen, wenn sich die Liste der lokalen Adressen ändert, an die die Anwendung binden kann.

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 winsock.h (einschließlich Winsock2.h)
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

WSAEventSelect

Winsock-Funktionen

Winsock-Referenz

select