Share via


LPFN_DISCONNECTEX Rückruffunktion (mswsock.h)

Die DisconnectEx-Funktion schließt eine Verbindung an einem Socket und ermöglicht die Wiederverwendung des Sockethandles.

Hinweis

Diese Funktion ist eine Microsoft-spezifische Erweiterung der Windows Sockets-Spezifikation.

Syntax

LPFN_DISCONNECTEX LpfnDisconnectex;

BOOL LpfnDisconnectex(
  SOCKET s,
  LPOVERLAPPED lpOverlapped,
  DWORD dwFlags,
  DWORD dwReserved
)
{...}

Parameter

s

Ein Handle für einen verbundenen, verbindungsorientierten Socket.

lpOverlapped

Ein Zeiger auf eine Struktur OVERLAPPED. Wenn das Sockethandle als überlappend geöffnet wurde, führt die Angabe dieses Parameters zu einem überlappenden (asynchronen) E/A-Vorgang.

dwFlags

Eine Gruppe von Flags, die die Verarbeitung des Funktionsaufrufs anpassen. Wenn dieser Parameter auf Null festgelegt ist, werden keine Flags festgelegt. Der dwFlags-Parameter kann den folgenden Wert aufweisen.

Flag Bedeutung
TF_REUSE_SOCKET Bereitet das Sockethandle für die Wiederverwendung vor. Wenn die DisconnectEx-Anforderung abgeschlossen ist, kann das Sockethandle an die AcceptEx - oder ConnectEx-Funktion übergeben werden.
Hinweis: Die Trennung der Socketebene unterliegt dem Verhalten des zugrunde liegenden Transports. Beispielsweise kann ein TCP-Socket dem TCP-TIME_WAIT Zustand unterliegen, wodurch der DisconnectEx-Aufruf verzögert wird.

dwReserved

Reserviert. Muss Null sein. Wenn nichtzero, wird WSAEINVAL zurückgegeben.

Rückgabewert

Bei Erfolg gibt die DisconnectEx-FunktionTRUE zurück. Bei einem Fehler gibt die Funktion FALSE zurück. Verwenden Sie die WSAGetLastError-Funktion , um erweiterte Fehlerinformationen abzurufen. Wenn ein Aufruf der WSAGetLastError-FunktionERROR_IO_PENDING zurückgibt, wird der Vorgang erfolgreich initiiert und wird ausgeführt. Unter solchen Umständen schlägt der Aufruf möglicherweise weiterhin fehl, wenn der Vorgang abgeschlossen ist.

Fehlercode BESCHREIBUNG
WSAEFAULT Das System hat beim Versuch, ein Zeigerargument zu verwenden, eine ungültige Zeigeradresse erkannt. Dieser Fehler wird zurückgegeben, wenn ein ungültiger Zeigerwert im lpOverlapped-Parameter übergeben wurde.
WSAEINVAL Der ungültige Parameter wurde übergeben. Dieser Fehler wird zurückgegeben, wenn der dwFlags-Parameter mit einem anderen Wert von null als TF_REUSE_SOCKET angegeben wurde.
WSAENOTCONN Der Socket ist nicht verbunden. Dieser Fehler wird zurückgegeben, wenn sich der Socket-s-Parameter nicht in einem verbundenen Zustand befand. Dieser Fehler kann auch zurückgegeben werden, wenn sich der Socket im Übertragungsschlusszustand einer vorherigen Anforderung befand und der dwFlags-Parameter nicht auf TF_REUSE_SOCKET festgelegt wurde, um eine Wiederverwendung des Sockets anzufordern.

Hinweise

Die DisconnectEx-Funktion unterstützt keine Datagrammsockets. Daher muss der von hSocket angegebene Socket verbindungsorientiert sein, z. B. ein SOCK_STREAM, SOCK_SEQPACKET oder SOCK_RDM Socket.

Hinweis

Der Funktionszeiger für die DisconnectEx-Funktion muss zur Laufzeit abgerufen werden, indem die WSAIoctl-Funktion mit dem angegebenen SIO_GET_EXTENSION_FUNCTION_POINTER opcode aufgerufen wird. Der an die WSAIoctl-Funktion übergebene Eingabepuffer muss WSAID_DISCONNECTEX enthalten, einen global eindeutigen Bezeichner (GUID), dessen Wert die DisconnectEx-Erweiterungsfunktion identifiziert. Bei Erfolg enthält die von der WSAIoctl-Funktion zurückgegebene Ausgabe einen Zeiger auf die DisconnectEx-Funktion . Die WSAID_DISCONNECTEX GUID ist in der Headerdatei "Mswsock.h " definiert.

Wenn lpOverlapped nicht NULL ist, werden überlappende E/A möglicherweise nicht beendet, bevor DisconnectEx zurückgibt. Dies führt dazu, dass die DisconnectEx-FunktionFALSE und ein Aufruf der WSAGetLastError-FunktionERROR_IO_PENDING zurückgibt. Dieser Entwurf ermöglicht es dem Aufrufer, die Verarbeitung fortzusetzen, während der Verbindungsvorgang abgeschlossen ist. Nach Abschluss der Anforderung legt Windows entweder das vom hEvent-Member der OVERLAPPED-Struktur angegebene Ereignis oder den von hSocket angegebenen Socket auf den signalierten Zustand fest.

Hinweis

Alle von einem bestimmten Thread initiierten E/A-Vorgänge werden abgebrochen, wenn dieser Thread beendet wird. Bei überlappenden Sockets können ausstehende asynchrone Vorgänge fehlschlagen, wenn der Thread geschlossen wird, bevor die Vorgänge abgeschlossen werden. Weitere Informationen finden Sie unter ExitThread .

Der TIME_WAIT Zustand bestimmt die Zeit, die verstreichen muss, bevor TCP eine geschlossene Verbindung freigeben und seine Ressourcen wiederverwenden kann. Dieses Intervall zwischen Schließung und Freigabe wird als TIME_WAIT Zustand oder 2MSL-Zustand bezeichnet. Während dieser Zeit kann die Verbindung zu wesentlich geringeren Kosten für den Client und server wieder geöffnet werden als das Herstellen einer neuen Verbindung. Das TIME_WAIT Verhalten wird in RFC 793 angegeben, was erfordert, dass TCP eine geschlossene Verbindung für ein Intervall unterhält, das mindestens dem Doppelten der maximalen Segmentlebensdauer (MSL) des Netzwerks entspricht. Wenn eine Verbindung freigegeben wird, können das Socketpaar und die internen Ressourcen, die für den Socket verwendet werden, verwendet werden, um eine andere Verbindung zu unterstützen.

Windows TCP wird nach dem Schließen einer Verbindung in einen TIME_WAIT Zustand zurückgesetzt. Im TIME_WAIT Zustand kann ein Socketpaar nicht erneut verwendet werden. Der TIME_WAIT Zeitraums kann durch Ändern der folgenden DWORD-Registrierungseinstellung konfiguriert werden, die den TIME_WAIT Zeitraum in Sekunden darstellt.

HKEY_LOCAL_MACHINE\System\Currentcontrolset\Dienstleistungen\TCPIP\Parameter\Tcptimedwaitdelay

Standardmäßig ist die MSL auf 120 Sekunden definiert. Die TcpTimedWaitDelay-Registrierungseinstellung ist standardmäßig auf einen Wert von 240 Sekunden festgelegt, der das 2-Fache der maximalen Segmentlebensdauer von 120 Sekunden oder 4 Minuten darstellt. Sie können diesen Eintrag jedoch verwenden, um das Intervall anzupassen. Wenn Sie den Wert dieses Eintrags reduzieren, kann TCP geschlossene Verbindungen schneller freigeben und mehr Ressourcen für neue Verbindungen bereitstellen. Wenn der Wert jedoch zu niedrig ist, gibt TCP möglicherweise Verbindungsressourcen frei, bevor die Verbindung abgeschlossen ist, sodass der Server zusätzliche Ressourcen zum erneuten Herstellen der Verbindung verwenden muss. Diese Registrierungseinstellung kann zwischen 0 und 300 Sekunden festgelegt werden.

Windows Phone 8: Diese Funktion wird für Windows Phone Store-Apps auf Windows Phone 8 und höher unterstützt.

Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Anforderungen

Anforderung Wert
Header mswsock.h