Freigeben über


LPWSPSELECT-Rückruffunktion (ws2spi.h)

Die LPWSPSelect--Funktion bestimmt den Status eines oder mehrerer Sockets.

Syntax

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
)
{...}

Parameter

[in] nfds

Ignoriert und nur aus Gründen der Kompatibilität enthalten.

[in, out] readfds

Optionaler Zeiger auf eine Reihe von Sockets, die auf Lesbarkeit überprüft werden sollen.

[in, out] writefds

Optionaler Zeiger auf eine Reihe von Sockets, die auf Schreibbarkeit überprüft werden sollen.

[in, out] exceptfds

Optionaler Zeiger auf eine Reihe von Sockets, die auf Fehler überprüft werden sollen.

[in] timeout

Maximale Zeit für LPWSPSelect- warten, oder NULL- für einen Blockierungsvorgang in Form einer Zeitvale Struktur.

[out] lpErrno

Zeigen Sie auf den Fehlercode.

Rückgabewert

Die funktion LPWSPSelect gibt die Gesamtanzahl der Deskriptoren zurück, die bereit sind und in den fd_set Strukturen enthalten sind, oder SOCKET_ERROR, wenn ein Fehler aufgetreten ist. Wenn der Rückgabewert SOCKET_ERROR ist, steht in lpErrnoein bestimmter Fehlercode zur Verfügung.

Fehlercode Bedeutung
WSAEFAULT-
Der Windows Sockets-Dienstanbieter konnte die erforderlichen Ressourcen für seine internen Vorgänge nicht zuordnen, oder die readfds, writefds, außer oder Timeval Parameter sind nicht Teil des Benutzeradressraums.
WSAENETDOWN-
Fehler des Netzwerksubsystems.
WSAEINVAL-
Der Timeout- Wert ist ungültig, oder alle drei Deskriptorparameter wurden NULL-.
WSAEINTR-
(Blockierung) Der Anruf wurde über LPWSPCancelBlockingCallabgebrochen.
WSAEINPROGRESS
Das Blockieren des Windows Sockets-Aufrufs wird ausgeführt, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion.
WSAENOTSOCK-
Einer der Deskriptorsätze enthält einen Eintrag, der kein Socket ist.

Bemerkungen

Diese Funktion wird verwendet, um den Status eines oder mehrerer Sockets zu bestimmen. Für jeden Socket kann der Aufrufer Informationen zum Lesen, Schreiben oder Fehlerstatus anfordern. Der Satz von Sockets, für die ein bestimmter Status angefordert wird, wird durch eine fd_set Struktur angegeben. Alle Einträge in einem fd_set entsprechen Sockets, die vom Dienstanbieter erstellt wurden (d. a. die WSAPROTOCOL_INFO Strukturen, die ihre Protokolle beschreiben, weisen den gleichen ProviderId Wert auf). Nach der Rückgabe werden die Strukturen aktualisiert, um die Teilmenge dieser Sockets widerzuspiegeln, die die angegebene Bedingung erfüllen, und LPWSPSelect gibt die Gesamtanzahl der Sockets zurück, die die Bedingungen erfüllen. Es wird eine Reihe von Makros zum Bearbeiten eines fd_setbereitgestellt. Diese Makros sind mit denen kompatibel, die in der Berkeley-Software verwendet werden, aber die zugrunde liegende Darstellung ist völlig anders.

Der Parameter readfds identifiziert die Sockets, die auf Lesbarkeit überprüft werden sollen. Wenn der Socket derzeit über LPWSPListen-überwacht wird, wird er als lesbar gekennzeichnet, wenn eine eingehende Verbindungsanforderung empfangen wurde, sodass eine LPWSPAccept- garantiert abgeschlossen ist, ohne die Blockierung zu blockieren. Bei anderen Sockets bedeutet die Lesbarkeit, dass in die Warteschlange eingereihte Daten zum Lesen verfügbar sind, sodass eine LPWSPRecv oder LPWSPRecvFrom nicht blockiert werden kann.

Bei verbindungsorientierten Sockets kann die Lesbarkeit auch angeben, dass eine Schließen-Anforderung vom Peer empfangen wurde. Wenn der virtuelle Schaltkreis ordnungsgemäß geschlossen wurde, wird ein LPWSPRecv- sofort mit null Bytes zurückgegeben. Wenn der virtuelle Schaltkreis zurückgesetzt wurde, wird ein LPWSPRecv sofort mit einem Fehlercode wie WSAECONNRESET abgeschlossen. Das Vorhandensein von OOB-Daten wird überprüft, wenn die Socketoption SO_OOBINLINE aktiviert wurde (siehe LPWSPSetSockOpt).

Der Parameter writefds identifiziert die Sockets, die zur Schreibbarkeit überprüft werden sollen:

  • Wenn ein Socket über LPWSPConnectverbunden ist, bedeutet die Schreibbarkeit, dass die Verbindungseinrichtung erfolgreich abgeschlossen wurde.
  • Wenn sich der Socket nicht im Prozess der Überwachung über LPWSPConnectbefindet, bedeutet die Schreibbarkeit, dass ein LPWSPSend oder LPWSPSendTo garantiert erfolgreich ist.

Sie können jedoch auf einem Blockierungssocket blockieren, wenn die len den verfügbaren Speicherplatz für ausgehende Systempuffer überschreitet. Es wird nicht angegeben, wie lange diese Garantien gelten können, insbesondere in einer Multithreadumgebung.

Der Parameter außerfds identifiziert die Sockets, die auf das Vorhandensein von OOB-Daten oder auf außergewöhnliche Fehlerbedingungen überprüft werden sollen. Beachten Sie, dass OOB-Daten nur auf diese Weise gemeldet werden, wenn die Option SO_OOBINLINE FALSE-ist. Wenn ein Socket eine LPWSPConnect (nonblocking) Verbindung herstellt, wird ein Fehler des Verbindungsversuchs in mit Ausnahme vonangegeben. Diese Spezifikation definiert nicht, welche anderen Fehler eingeschlossen werden.

Alle zwei readfds, writefds, oder außer können als NULL- angegeben werden, wenn keine Deskriptoren auf die Bedingung von Interesse überprüft werden sollen. Mindestens eine muss nichtNull-sein, und alle nichtnull Deskriptorsatz müssen mindestens einen Socketdeskriptor enthalten.

Zusammenfassung: Ein Socket wird in einem bestimmten Satz identifiziert, wenn LPWSPSelect- wie folgt zurückgegeben wird.

Parameter Beschreibung
readfds: Wenn LPWSPListen- aufgerufen wird, steht eine Verbindung aus, LPWSPAccept erfolgreich ist. Daten stehen zum Lesen zur Verfügung (einschließlich OOB-Daten, wenn SO_OOBINLINE aktiviert ist). Die Verbindung wurde geschlossen/zurückgesetzt/beendet.
writefds: Wenn LPWSPConnect- (nicht blockierend) erfolgreich ist, ist die Verbindung erfolgreich. Daten können gesendet werden.
außer: Wenn LPWSPConnect- (nicht blockierend) fehlgeschlagen ist, ist der Verbindungsversuch fehlgeschlagen. OOB-Daten sind zum Lesen verfügbar (nur wenn SO_OOBINLINE deaktiviert ist).

 

 

Drei Makros und eine Upcall-Funktion sind in der Headerdatei Ws2spi.h zum Bearbeiten und Überprüfen der Deskriptorsätze definiert. Die Variable FD_SETSIZE bestimmt die maximale Anzahl von Deskriptoren in einem Satz. (Der Standardwert von FD_SETSIZE ist 64, der von #defining FD_SETSIZE in einen anderen Wert geändert werden kann, bevor #including Ws2spi.h.) Intern werden Sockethandles in einer fd_set nicht als Bitflaggen wie in Berkeley UNIX dargestellt. Die Datendarstellung ist undurchsichtig. Die Verwendung dieser Makros behält die Softwareübertragbarkeit zwischen verschiedenen Socketumgebungen bei.

Die Zu bearbeitenden Makros und die Überprüfung fd_set Inhalte sind:

FD_CLR(, *)

Entfernt den Deskriptor aus festgelegten.

FD_SET(, *)

Fügt Deskriptor zum festlegen hinzu.

FD_ZERO(*)

Initialisiert die festgelegte auf den Null- Satz.

Die upcall-Funktion, die zum Überprüfen der Mitgliedschaft verwendet wird, lautet:

intWPUFDIsSet (SOCKETs, FD_SET FAR *set);

wenn s ein Element des oder andernfalls Null ist, gibt diese Nichtzero zurück.

Der Parameter Timeout steuert, wie lange die LPWSPSelect- bis zum Abschluss dauern kann. Wenn Timeout- ein null Zeiger ist, wird LPWSPSelect- unbegrenzt blockiert, bis mindestens ein Deskriptor die angegebenen Kriterien erfüllt. Andernfalls verweist Timeout auf eine Timeval Struktur, die die maximale Zeit angibt, die LPWSPSelect- warten soll, bevor sie zurückgegeben wird. Wenn LPWSPSelect- zurückgegeben wird, werden die Inhalte der zeitvalen Struktur nicht geändert. Wenn Timeval- auf {0, 0} initialisiert wird, wird LPWSPSelect- sofort zurückgegeben; Dies wird verwendet, um den Status der ausgewählten Sockets abzufragen. Wenn dies der Fall ist, wird der LPWSPSelect- Aufruf als nichtblocking betrachtet und die Standardannahmen für nicht blockierende Aufrufe gelten. Der Blockierungshaken wird beispielsweise nicht aufgerufen, und der Windows Sockets-Anbieter gibt nicht zu.

Anmerkung

Die funktion LPWSPSelect hat keine Auswirkung auf die Persistenz von Socketereignissen, die mit LPWSPAsyncSelect oder LPWSPEventSelectregistriert sind.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 2000 Professional [nur Desktop-Apps]
mindestens unterstützte Server- Windows 2000 Server [nur Desktop-Apps]
Header- ws2spi.h

Siehe auch

LPWSPAccept-

LPWSPConnect-

LPWSPEventSelect-

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo