LPWSPSOCKET-Rückruffunktion (ws2spi.h)
Die LPWSPSocket-Funktion erstellt einen Socket. Informationen zur Rolle, die LPWSPSocket beim Erstellen eines freigegebenen Sockets spielt, finden Sie unter Freigegebene Sockets und freigegebene Sockets im SPI.
Syntax
LPWSPSOCKET Lpwspsocket;
SOCKET Lpwspsocket(
[in] int af,
[in] int type,
[in] int protocol,
[in] LPWSAPROTOCOL_INFOW lpProtocolInfo,
[in] GROUP g,
DWORD dwFlags,
[out] LPINT lpErrno
)
{...}
Parameter
[in] af
Adressfamilienspezifikation.
[in] type
Typspezifikation für den neuen Socket.
[in] protocol
Protokoll, das mit dem Socket verwendet werden soll, der für die angegebene Adressfamilie spezifisch ist.
[in] lpProtocolInfo
Zeiger auf eine WSAProtocol_Info Struktur, die die Merkmale des zu erstellenden Sockets definiert.
[in] g
Reserviert.
dwFlags
Spezifikation des Socket-Attributs.
[out] lpErrno
Zeiger auf den Fehlercode.
Rückgabewert
Wenn kein Fehler auftritt, gibt LPWSPSocket einen Deskriptor zurück, der auf den neuen Socket verweist. Andernfalls wird der Wert INVALID_SOCKET zurückgegeben, und ein bestimmter Fehlercode ist in lpErrno verfügbar.
Fehlercode | Bedeutung |
---|---|
Fehler beim Netzwerksubsystem. | |
Die angegebene Adressfamilie wird nicht unterstützt. | |
Der Windows Sockets-Aufruf wird blockiert, oder der Dienstanbieter verarbeitet weiterhin eine Rückruffunktion. | |
Es sind keine weiteren Socketbeschreibungen verfügbar. | |
Es ist kein Pufferplatz verfügbar. Der Socket kann nicht erstellt werden. | |
Das angegebene Protokoll wird nicht unterstützt. | |
Das angegebene Protokoll ist der falsche Typ für diesen Socket. | |
Der angegebene Sockettyp wird in dieser Adressfamilie nicht unterstützt. | |
Der angegebene Parameter g ist ungültig. |
Hinweise
Die LPWSPSocket-Funktion bewirkt, dass ein Socketdeskriptor und alle zugehörigen Ressourcen zugeordnet werden. Standardmäßig verfügt der erstellte Socket nicht über das überlappende Attribut. Windows Sockets-Anbieter sollten als installierbare Windows-Dateisysteme realisiert werden und Systemdateihandles als Socketdeskriptoren bereitstellen. Diese Anbieter müssen WPUModifyIFSHandle aufrufen, bevor sie von dieser Funktion zurückgegeben werden. Für Windows Sockets-Anbieter ohne Dateisystem muss WPUCreateSocketHandle verwendet werden, um einen eindeutigen Socketdeskriptor aus dem Ws2_32.dll zu erhalten, bevor von dieser Funktion zurückgegeben wird. Siehe
Deskriptorzuordnung für weitere Informationen.
Die Werte für af, type und protocol sind die Werte, die von der Anwendung im entsprechenden API Functions Socket oder WSASocket bereitgestellt werden. Ein Dienstanbieter ist frei, einen oder alle dieser Werte zu ignorieren oder darauf zu achten, wie es für das jeweilige Protokoll geeignet ist. Der Anbieter muss jedoch bereit sein, den Wert von null für af und type zu akzeptieren, da die Ws2_32.dll diese Werte als Platzhalterwerte betrachtet. Außerdem muss der Wert der Manifestkonstante FROM_PROTOCOL_INFO für alle Af-, Typ- und Protokolltypen akzeptiert werden. Dieser Wert gibt an, dass die Windows Sockets 2-Anwendung die entsprechenden Werte aus der WSAProtocol_Info-Struktur (iAddressFamily, iSocketType, iProtocol) verwenden muss.
Der dwFlags-Parameter kann verwendet werden, um die Attribute des Sockets mithilfe des bitweisen OR-Operators mit einem der folgenden Flags anzugeben.
Flag | Bedeutung |
---|---|
WSA_FLAG_OVERLAPPED | Dieses Flag bewirkt, dass ein überlappender Socket erstellt wird. Überlappende Sockets können LPWSPSend, LPWSPSendTo, LPWSPRecv, LPWSPRecvFrom und LPWSPIoctl für überlappende E/A-Vorgänge verwenden, wodurch mehrere Vorgänge gleichzeitig initiiert und ausgeführt werden können. Alle Funktionen, die überlappende Vorgänge zulassen, unterstützen auch die nicht überlappende Verwendung in einem überlappenden Socket, wenn die Werte für Parameter im Zusammenhang mit überlappenden Vorgängen NULL sind. |
WSA_FLAG_MULTIPOINT_C_ROOT | Gibt an, dass der erstellte Socket ein c_root in einer Multipointsitzung ist. Nur zulässig, wenn eine gerootete Steuerungsebene in der WSAProtocol_Info-Struktur des Protokolls angegeben ist. |
WSA_FLAG_MULTIPOINT_C_LEAF | Gibt an, dass der erstellte Socket ein c_leaf in einer Multicastsitzung ist. Nur zulässig, wenn XP1_SUPPORT_MULTIPOINT in der WSAProtocol_Info-Struktur des Protokolls angegeben ist. |
WSA_FLAG_MULTIPOINT_D_ROOT | Gibt an, dass der erstellte Socket ein d_root in einer Multipointsitzung ist. Nur zulässig, wenn eine gerootete Datenebene in der WSAProtocol_Info Struktur des Protokolls angegeben ist. |
WSA_FLAG_MULTIPOINT_D_LEAF | Gibt an, dass der erstellte Socket ein d_leaf in einer Multipointsitzung ist. Nur zulässig, wenn XP1_SUPPORT_MULTIPOINT in der WSAProtocol_Info-Struktur des Protokolls angegeben ist. |
Hinweis
Für Mehrpunktsockets muss genau ein WSA_FLAG_MULTIPOINT_C_ROOT oder WSA_FLAG_MULTIPOINT_C_LEAF angegeben werden, und es muss genau einer der WSA_FLAG_MULTIPOINT_D_ROOT oder WSA_FLAG_MULTIPOINT_D_LEAF angegeben werden. Weitere Informationen finden Sie unter Protokollunabhängiges Multicast und Multipoint im SPI .
Verbindungsorientierte Sockets wie SOCK_STREAM bieten Vollduplexverbindungen und müssen sich in einem verbundenen Zustand befinden, bevor Daten gesendet oder empfangen werden können. Eine Verbindung mit einem anderen Socket wird mit einem LPWSPConnect-Aufruf erstellt. Nach der Verbindung können Daten über LPWSPSend - und LPWSPRecv-Aufrufe übertragen werden. Wenn eine Sitzung abgeschlossen wurde, muss ein LPWSPCloseSocket ausgeführt werden.
Die Kommunikationsprotokolle, mit denen ein zuverlässiger, verbindungsorientierter Socket implementiert wird, stellen sicher, dass Daten nicht verloren gehen oder dupliziert werden. Wenn Daten, für die das Peerprotokoll Pufferspeicher hat, nicht innerhalb einer angemessenen Zeit erfolgreich übertragen werden können, wird die Verbindung als unterbrochen betrachtet, und nachfolgende Aufrufe schlagen fehl, wobei der Fehlercode auf WSAETIMEDOUT festgelegt ist.
Verbindungslose, nachrichtenorientierte Sockets ermöglichen das Senden und Empfangen von Datagrammen an und von beliebigen Peers mithilfe von LPWSPSendTo und LPWSPRecvFrom. Wenn ein solcher Socket mithilfe von LPWSPConnect mit einem bestimmten Peer verbunden ist, können Datagramme mithilfe von LPWSPSend an diesen Peer gesendet und (nur) mit LPWSPRecv von diesem Peer empfangen werden.
Die Unterstützung für Sockets vom Typ SOCK RAW ist nicht erforderlich, aber Dienstanbieter werden empfohlen, rohe Sockets zu unterstützen, wenn dies sinnvoll ist.
Ein Mehrschichtdienstanbieter stellt eine Implementierung dieser Funktion bereit, ist aber auch ein Client dieser Funktion, wenn lpWSPSocket der nächsten Ebene in der Protokollkette aufgerufen wird. Einige besondere Überlegungen gelten für den lpProtocolInfo-Parameter dieser Funktion, da er über die Ebenen der Protokollkette nach unten weitergegeben wird.
Wenn die nächste Ebene in der Protokollkette eine andere Ebene ist, muss diese Ebene beim Aufruf des LPWSPSocket der nächsten Ebene an die nächste Ebene lpProtocolInfo übergeben, die auf dieselbe unveränderte WSAProtocol_Info-Struktur mit denselben unveränderten Ketteninformationen verweist. Wenn die nächste Ebene jedoch das Basisprotokoll (d. h. das letzte Element in der Kette) ist, führt diese Ebene beim Aufrufen des LPWSPSockets des Basisanbieters eine Ersetzung durch. In diesem Fall sollte mit dem lpProtocolInfo-Parameter auf die WSAPROTOCOL_INFO-Struktur des Basisanbieters verwiesen werden.
Ein wesentlicher Vorteil dieser Richtlinie besteht darin, dass Die Basisdienstanbieter keine Protokollketten kennen müssen.
Dieselbe Weitergaberichtlinie gilt, wenn eine WSAProtocol_Info-Struktur über eine mehrstufige Sequenz anderer Funktionen wie LPWSPAddressToString, LPWSPDuplicateSocket, WSPStartup oder LPWSPStringToAddress weitergegeben wird.
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 | ws2spi.h |