Share via


LPWSPCANCELBLOCKINGCALL-Rückruffunktion (ws2spi.h)

Die LPWSPCancelBlockingCall-Funktion bricht einen blockierenden Aufruf ab, der derzeit ausgeführt wird.

Syntax

LPWSPCANCELBLOCKINGCALL Lpwspcancelblockingcall;

int Lpwspcancelblockingcall(
  [out] LPINT lpErrno
)
{...}

Parameter

[out] lpErrno

Zeiger auf den Fehlercode.

Rückgabewert

Der von LPWSPCancelBlockingCall zurückgegebene Wert ist null, wenn der Vorgang erfolgreich abgebrochen wurde. Andernfalls wird der Wert SOCKET_ERROR zurückgegeben, und ein bestimmter Fehlercode ist in lpErrno verfügbar.

Fehlercode Bedeutung
WSAENETDOWN
Fehler beim Netzwerksubsystem.
WSAEINVAL
Gibt an, dass kein ausstehender blockierenden Aufruf vorhanden ist.

Hinweise

Diese Funktion bricht alle ausstehenden Blockierungsvorgänge für diesen Thread ab. Es wird in der Regel in zwei Situationen verwendet:

  • Ein Windows Sockets SPI-Client verarbeitet eine Nachricht, die empfangen wurde, während ein Dienstanbieter Pseudoblocking implementiert. In diesem Fall ist WSAIsBlocking true.
  • Ein blockierender Aufruf wird ausgeführt, und der Winsock-Dienstanbieter hat die blockierende Hookfunktion des Winsock SPI-Clients zurückgerufen (über die Rückruffunktion, die von WPUQueryBlockingCallback abgerufen wurde), die wiederum diese Funktion aufruft. Eine solche Situation kann für instance bei der Implementierung einer Abbrechen-Option für einen Vorgang auftreten, der eine längere Zeit zum Abschließen benötigt.

In jedem Fall wird der ursprüngliche blockierende Aufruf so bald wie möglich mit dem Fehler WSAEINTR beendet. (Im ersten instance erfolgt die Beendigung erst, wenn die Windows-Nachrichtenplanung dazu geführt hat, dass die Kontrolle auf die Pseudoblockierungsroutine in Winsock zurück rückgängig machen. Im zweiten instance wird der blockierende Aufruf beendet, sobald die blockende Hookfunktion abgeschlossen ist.)

Im Falle eines blockierenden LPWSPConnect-Vorgangs beendet Winsock den blockierenden Aufruf so bald wie möglich, aber es kann nicht möglich sein, dass die Socketressourcen freigegeben werden, bis die Verbindung abgeschlossen (und dann zurückgesetzt wurde) oder ein Timeout auftritt. Dies ist wahrscheinlich nur spürbar, wenn der Winsock SPI-Client sofort versucht, einen neuen Socket zu öffnen (wenn keine Sockets verfügbar sind) oder über einen LPWSPConnect-Aufruf eine Verbindung mit demselben Peer herzustellen.

Das Abbrechen eines LPWSPAccept - oder LPWSPSelect-Aufrufs wirkt sich nicht negativ auf die Sockets aus, die an diese Aufrufe übergeben werden. Nur der jeweilige Aufruf schlägt fehl; Alle Vorgänge, die vor dem Abbruch legal waren, sind nach dem Abbruch legal, und der Zustand des Sockets wird in keiner Weise beeinflusst.

Das Abbrechen eines anderen Vorgangs als LPWSPAccept und LPWSPSelect kann den Socket in einem unbestimmten Zustand belassen. Wenn ein Winsock SPI-Client einen blockierenden Vorgang für einen Socket abbricht, ist der einzige Vorgang, den der Winsock SPI-Client für den Socket ausführen kann, ein Aufruf von LPWSPCloseSocket, obwohl andere Vorgänge bei einigen Winsock-Dienstanbietern funktionieren können. Wenn ein Winsock SPI-Client maximale Portabilität erfordert, muss darauf geachtet werden, dass nach einem Abbruchvorgang keine Vorgänge ausgeführt werden. Ein Winsock SPI-Client kann die Verbindung zurücksetzen, indem er das Timeout für SO_LINGER auf Null festlegt und LPWSPCloseSocket aufruft.

Wenn ein Abbruchvorgang die Integrität des Datenstroms eines SOCK_STREAM in irgendeiner Weise gefährdet hat, setzt der Winsock-Anbieter die Verbindung zurück und schlägt mit WSAECONNABORTED alle zukünftigen Vorgänge außer LPWSPCloseSocket fehl.

Es ist akzeptabel, dass LPWSPCancelBlockingCall erfolgreich zurückgegeben wird, wenn der blockierende Netzwerkvorgang abgeschlossen wird, bevor er abgebrochen wird. In diesem Fall wird der Blockierungsvorgang erfolgreich zurückgegeben, als ob LPWSPCancelBlockingCall nie aufgerufen worden wäre. Die einzige Möglichkeit für den Winsock SPI-Client zu bestätigen, dass ein Vorgang tatsächlich abgebrochen wurde, besteht darin, einen Rückgabecode von WSAEINTR aus dem blockierenden Aufruf zu überprüfen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile ws2spi.h

Weitere Informationen

WPUQueryBlockingCallback

WSAIsBlocking

LPWSPAccept

LPWSPCloseSocket

LPWSPSelect

LPWSPSocket