Mehrfachanbietereinschränkungen für „select“
Die select-Funktion wird verwendet, um den Status eines oder mehrerer Sockets in einer Gruppe zu bestimmen. Aufrufer können für jeden Socket Informationen zum Lese-, Schreib- oder Fehlerstatus anfordern. Eine Gruppe von Sockets wird durch eine fd_set-Struktur angegeben.
Windows Sockets 2 ermöglicht einer Anwendung die Verwendung mehrerer Dienstanbieter, die select-Funktion ist jedoch auf eine Gruppe von Sockets beschränkt, die einem einzelnen Dienstanbieter zugeordnet sind. Dies wird in keiner Weise eingeschränkt, dass eine Anwendung mehrere Sockets über mehrere Anbieter geöffnet haben kann.
Es gibt zwei Möglichkeiten, den Status einer Gruppevon Sockets zu bestimmen, die mehrere Dienstanbieter umfassen:
- Verwenden der Funktion WSAWaitForMultipleEvents oder WSAEventSelect, wenn eine Blockierungssemantik eingesetzt wird.
- Verwenden der WSAAsyncSelect-Funktion, wenn nicht blockierte Vorgänge eingesetzt werden und die Anwendung bereits eine Windows-Nachrichtenpumpe verwendet.
Wenn eine Anwendung eine Blockierungssemantik für eine Gruppe von Sockets, die mehrere Anbieter umfasst, verwenden muss, wird WSAWaitForMultipleEvents empfohlen. Die Anwendung kann auch die WSAEventSelect-Funktion verwenden, mit der die FD_XXX Netzwerkereignisse (siehe WSAEventSelect) einem Ereignisobjekt zugeordnet und innerhalb des Ereignisobjektparadigmas (das in Überlappende E/A und Ereignisobjekte beschrieben wird) verarbeitet werden können.
Die WSAAsyncSelect-Funktion ist nicht auf einen einzelnen Anbieter beschränkt, weil sie einen einzelnen Socketdeskriptor als Eingabeparameter verwendet. Beachten Sie jedoch, dass die WSAEventSelect-Funktion eine bessere Leistung und Skalierbarkeit als WSAAsyncSelect bietet, da der Mehraufwand für die Pflege der Nachrichtenpumpe mit Winsock-Ereignisnachrichten mit der Gesamtzahl der verwendeten Sockets zunimmt.