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 |
---|---|
Vor der Verwendung dieser Funktion muss ein erfolgreicher WSAStartup-Aufruf erfolgen. | |
Fehler beim Netzwerksubsystem. | |
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. | |
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet noch eine Rückruffunktion. | |
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.
#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:
- Daten werden in Sockets eintreffen; Windows Sockets 2 postet WSAAsyncSelect-Nachricht
- Anwendungsprozesse, eine andere Meldung
- Während der Verarbeitung gibt die Anwendung eine aus
ioctlsocket(s, FIONREAD...)
und stellt fest, dass Daten zum Lesen bereit sind. - Die Anwendung gibt eine
recv(s,...)
aus, um die Daten zu lesen. - Anwendungsschleifen zum Verarbeiten der nächsten Nachricht, die schließlich die WSAAsyncSelect-Meldung erreichen, die angibt, dass die Daten lesebereit sind.
- Anwendungsprobleme
recv(s,...)
, die mit dem Fehler WSAEWOULDBLOCK fehlschlägt.
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:
- Der Netzwerktransportstapel empfängt 100 Byte Daten auf Sockets und bewirkt, dass Windows Sockets 2 eine FD_READ Nachricht postet.
- Die Anwendung gibt recv( s, buffptr, 50, 0) aus, um 50 Bytes zu lesen.
- Eine weitere FD_READ Nachricht wird gepostet, da noch Daten gelesen werden müssen.
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:
- Eine Anwendung ruft listen auf.
- Eine Verbindungsanforderung wird empfangen, aber noch nicht akzeptiert.
- 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:
- Wenn WSAAsyncSelect aufgerufen wird, wenn derzeit Daten zum Empfangen verfügbar sind.
- Wenn Daten eintreffen, wenn FD_READ noch nicht veröffentlicht wurde.
- 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:
- Wenn WSAAsyncSelect aufgerufen hat, wenn ein Senden oder Senden möglich ist.
- Nachdem die Verbindung hergestellt oder akzeptiert wurde, wird beim Herstellen der Verbindung aufgerufen.
- Nach dem Senden oder Senden mitWSAEWOULDBLOCK schlägt ein Fehler fehl, wenn send oder sendto wahrscheinlich erfolgreich ist.
- 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).
-
FD_ACCEPT:
- Wenn WSAAsyncSelect aufgerufen hat, wenn derzeit eine Verbindungsanforderung zur Annahme verfügbar ist.
- Wenn eine Verbindungsanforderung eingeht, wenn FD_ACCEPT noch nicht veröffentlicht.
- Nachdem accept aufgerufen wurde, wenn eine andere Verbindungsanforderung zur Annahme verfügbar ist.
-
FD_CONNECT:
- Wenn WSAAsyncSelect aufgerufen wurde, wenn derzeit eine Verbindung hergestellt wurde.
- Nach dem Aufrufen der Verbindung , wenn die Verbindung hergestellt wird, auch wenn die Verbindung sofort erfolgreich ist, wie es bei einem Datagrammsocket üblich ist.
- Nach dem Aufrufen von WSAJoinLeaf, wenn der Joinvorgang abgeschlossen ist.
- 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)
- Wenn WSAAsyncSelect aufgerufen wurde, wenn die Socketverbindung geschlossen wurde.
- 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).
- 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.
- 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:
- Wenn WSAAsyncSelect aufgerufen wurde, wenn die Dienstqualität, die dem Socket zugeordnet ist, geändert wurde.
- 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 |