Freigeben über


WSARecvDisconnect-Funktion (winsock2.h)

Die WSARecvDisconnect-Funktion beendet den Empfang auf einem Socket und ruft die Trenndaten ab, wenn der Socket verbindungsorientiert ist.

Syntax

int WSAAPI WSARecvDisconnect(
  [in]  SOCKET   s,
  [out] LPWSABUF lpInboundDisconnectData
);

Parameter

[in] s

Ein Deskriptor, der einen Socket identifiziert.

[out] lpInboundDisconnectData

Ein Zeiger auf die eingehenden Trennungsdaten.

Rückgabewert

Wenn kein Fehler auftritt, gibt WSARecvDisconnect null zurück. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode 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.
WSAEFAULT
Der Puffer, auf den der Parameter lpInboundDisconnectData verweist, ist zu klein.
WSAENOPROTOOPT
Die Trennungsdaten werden von der angegebenen Protokollfamilie nicht unterstützt. Beachten Sie, dass TCP/IP-Implementierungen, die keine Trennungsdaten unterstützen, nicht erforderlich sind, um den WSAENOPROTOOPT-Fehlercode zurückzugeben. Im Abschnitt "Hinweise" finden Sie Informationen zur Microsoft-Implementierung von TCP/IP.
WSAEINPROGRESS
Ein blockierter Windows Sockets 1.1-Aufruf wird ausgeführt, oder der Dienstanbieter verarbeitet noch eine Rückruffunktion.
WSAENOTCONN
Der Socket ist nicht verbunden (nur verbindungsorientierte Sockets).
WSAENOTSOCK
Der Deskriptor ist kein Socket.

Hinweise

Die WSARecvDisconnect-Funktion wird auf verbindungsorientierten Sockets verwendet, um den Empfang zu deaktivieren und alle eingehenden Verbindungsdaten von der Remotepartei abzurufen. Dies entspricht einem Herunterfahren (SD_RECEIVE), mit der Ausnahme, dass WSARecvDisconnect auch den Empfang von Getrenntdaten (in Protokollen, die dies unterstützen) zulässt.

Nachdem diese Funktion erfolgreich ausgestellt wurde, werden nachfolgende Empfangsvorgänge für den Socket nicht mehr zugelassen. Das Aufrufen von WSARecvDisconnect hat keine Auswirkungen auf die unteren Protokollebenen. Bei TCP-Sockets wird die Verbindung zurückgesetzt, da die Daten nicht an den Benutzer übermittelt werden können, wenn weiterhin Daten auf dem Socket in die Warteschlange eingereiht sind, die auf den Empfang warten. Für UDP werden eingehende Datagramme akzeptiert und in die Warteschlange eingereiht. In keinem Fall wird ein ICMP-Fehlerpaket generiert.

Hinweis Die native Implementierung von TCP/IP unter Windows unterstützt keine Trennen von Daten. Trennen von Daten wird nur von Windows Sockets-Anbietern unterstützt, die das flag XP1_DISCONNECT_DATA in ihrer WSAPROTOCOL_INFO-Struktur haben. Verwenden Sie die WSAEnumProtocols-Funktion , um WSAPROTOCOL_INFO-Strukturen für alle installierten Anbieter abzurufen.
 
Um eingehende Trennungsdaten erfolgreich zu empfangen, muss eine Anwendung andere Mechanismen verwenden, um festzustellen, ob die Verbindung geschlossen wurde. Beispielsweise muss eine Anwendung eine FD_CLOSE Benachrichtigung empfangen, um einen Null-Rückgabewert zu erhalten oder einen WSAEDISCON- oder WSAECONNRESET-Fehlercode von recv/WSARecv zu erhalten.

Die WSARecvDisconnect-Funktion schließt den Socket nicht, und an den Socket angefügte Ressourcen werden erst freigegeben, wenn closesocket aufgerufen wird.

Die WSARecvDisconnect-Funktion wird unabhängig von der Einstellung SO_LINGER für den Socket nicht blockiert.

Eine Anwendung sollte sich nicht darauf verlassen, einen Socket wiederverwenden zu können, nachdem er mithilfe von WSARecvDisconnect getrennt wurde. Insbesondere ist ein Windows Sockets-Anbieter nicht verpflichtet, die Verwendung von connect oder WSAConnect für einen solchen Socket zu unterstützen.

Hinweis Wenn Sie einen blockierenden Winsock-Aufruf wie WSARecvDisconnect ausstellen, muss Winsock möglicherweise auf ein Netzwerkereignis warten, bevor der Anruf abgeschlossen werden kann. Winsock führt in dieser Situation eine warnbare Wartezeit aus, die durch einen asynchronen Prozeduraufruf (APC) unterbrochen werden kann, der für denselben Thread geplant ist. Das Ausstellen eines weiteren blockierenden Winsock-Aufrufs innerhalb eines APC, der einen fortlaufend blockierenden Winsock-Aufruf im selben Thread unterbrochen hat, führt zu undefiniertem Verhalten und darf niemals von Winsock-Clients versucht werden.
 

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 winsock2.h
Bibliothek Ws2_32.lib
DLL Ws2_32.dll

Weitere Informationen

WSAConnect

WSAEnumProtocols

WSAGetLastError

WSAPROTOCOL_INFO

WSARecv

Winsock-Funktionen

Winsock-Referenz

closesocket

connect

Socket