Windows Sockets: Blockieren

Dieser Artikel und zwei Begleit artikel beschreiben verschiedene Probleme bei der Windows Socket-Programmierung.Dieser Artikel enthält das Blockieren.Die anderen Probleme werden in den Artikeln behandelt: Windows-Sockets: Bytereihenfolge und Windows-Sockets: Konvertieren von Zeichenfolgen.

Wenn Sie von der Klasse ableiten oder CAsyncSocket verwenden, müssen Sie diese Probleme verwalten.Wenn Sie von der Klasse ableiten, oder verwenden CSocket MFC sie für Sie verwaltet.

Blockieren

Ein Socket kann in "blockierenden Modus" oder "im nicht blockierenden Modus" sein. Die Features von Sockets im Blockieren (oder im synchronen Modus) kehren nicht zurück, bis sie ihre Aktion durchführen können.Dies wird als Blockieren bezeichnet, da der Socket, dessen Funktion aufgerufen wurde, wird nichts — Rückkehraufrufe — blockiert, bis die nicht ausführen kann.Ein Aufruf der Memberfunktion Receive könnte beispielsweise eine willkürlich lange dauert, der auf die sendende Anwendung wartet, um zu senden (dieser wird, wenn Sie CSocket verwenden oder mit CAsyncSocket mit dem Blockieren).Wenn ein Objekt im CAsyncSocket nicht blockierenden Modus (asynchron) Rückkehraufrufen funktionierend und sofort im aktuellen Fehlercode ist, der der GetLastError-Memberfunktion, ist WSAEWOULDBLOCK abrufbar ist und angibt, dass der Aufruf wurde aufgrund des Modus nicht sofort zurückgeben blockiert worden wäre.(CSocket gibt nie WSAEWOULDBLOCK zurück.Die für das Blockieren Klasse verwaltet.)

Das Verhalten von Sockets 32-Bit- und ist unter 64-Bit-Betriebssystemen (z. B. Windows 95 oder Windows 98) als bei 16-Bit-Betriebssystemen unterschiedlich (z. B. Windows 3.1).Im Gegensatz zu 16-Bit-Betriebssysteme verwenden das präemptives Multitasking 32-Bit- und 64-Bit-Betriebssysteme und stellen Multithreading.Unter dem 32-Bit- und den 64-Bit-Betriebssystemen können Sie die Sockets in separaten Arbeitsthreads einfügen.Ein Socket in einem Thread blockieren kann, ohne weitere Aktivitäten in der Anwendung zu beeinträchtigen und ohne Berechnung zeit für das Blockieren zu verbringen.Weitere Informationen über das Programmieren mit LIBCMT.lib, finden Sie im Artikel Multithreading.

HinweisHinweis

In Multithreadanwendungen können Sie die blockierenden Art von CSocket verwenden, um den Entwurf des Programms zu vereinfachen, ohne die Reaktionsfähigkeit der Benutzeroberfläche zu beeinflussen.Indem Sie Benutzerinteraktionen behandeln und im Hauptthread CSocket, die in den alternativen Threads hinweg, können Sie die logischen Operationen trennen.In einer Anwendung, die nicht mehrfädig ist, müssen diese beiden Aktivitäten als einzelnen Thread, der gewöhnlich behandeln und kombiniert werden mit CAsyncSocket bedeutet, dass Sie Kommunikations Anforderungen bei Bedarf bearbeiten können, oder CSocket::OnMessagePending zu überschreiben, um Benutzeraktionen während der längeren synchronen Aktivität zu behandeln.

Der Rest dieser Diskussion ist für Programmierer, die 16-Bit-Betriebssysteme programmieren:

Normalerweise wenn Sie CAsyncSocket verwenden, sollten Sie vermeiden, blockierenden Vorgänge asynchron zu verwenden und stattdessen verwendet werden.In den asynchronen Vorgängen an denen vom Punkt Sie einen WSAEWOULDBLOCK Fehlercode empfangen, nachdem Sie Receive Aufrufen warten Sie z. B., wenn die OnReceive-Memberfunktion aufgerufen wird, um Sie zu benachrichtigen, dass Sie erneut gelesen werden können.Asynchrone Aufrufe werden vom aufrufenden Funktion des Sockets entsprechende Rückruf-Benachrichtigungs wieder, z. B. OnReceive gemacht.

Unter Windows werden als blockierende Aufrufe ungültige Praxis.Standardmäßig unterstützt CAsyncSocket asynchrone Aufrufe, und Sie müssen das Blockieren mit der Rückruf Benachrichtigungen verwalten.CSocket-Klasse hingegen ist synchron.Sie verwaltet das Blockieren und Windows-Meldungen weiterleitet.

Weitere Informationen zum Blockieren finden Sie auf der Windows Socket-Spezifikation.Weitere Informationen über " on " - Funktionen finden Sie Windows-Sockets: Socket-Benachrichtigungen und Windows-Sockets: Klicken Sie im Socket-Klassen berechnen.

Weitere Informationen finden Sie unter:

Siehe auch

Referenz

CAsyncSocket::OnSend

Konzepte

Windows Sockets in MFC