Code

Auf dieser Seite stelle ich einige Code-Schnipsel zur Verfügung, weil man das Rad ja nicht unbedingt nochmal neu erfinden muss. Der Großteil entstammt der Windows-Socket-Programmierung mit C++. Konstruktive Kritik, Verbesserungsvorschläge, Fragen bitte einfach per E-Mail an mich senden, es besteht jedoch keinerlei Support-Anspruch.

CSyncSocket: synchrone Windows-Sockets

In der MFC für Visual C++ gibt es die Klassen CAsyncSocket und davon abgeleitet CSocket. Beide basieren auf nicht blockierenden asynchronen Sockets sind daher – verglichen mit den konventionellen Berkeley-Sockets – insbesondere bei der Serverprogrammierung mit Vorsicht und Sorgfalt zu genießen. Mit der Klasse CSyncSocket habe ich mir eine Schnittstelle mit nach außen hin denselben Aufrufen wie CSocket geschaffen, die jedoch intern direkt auf der WinSock-API mit echten blockierenden Sockets arbeitet. Dadurch ist diese Klasse für GUI-lose Dienste mit Multithreading geeignet und vereinfacht hierbei die Handhabung der Sockets erheblich.
 

Achtung: Im Laufe der Entwicklung haben sich umfangreiche Erweiterungen an meiner CSyncSocket-Klasse ergeben, die sich nicht mehr über eine eins zu eins zu CSocket kompatible Schnittstelle haben abbilden lassen. Auf diese Erweiterungen beziehen sich die folgenden Klassen.

CSyncSocketEx: Timeout- und Fehlerbehandlung mit C++-Exceptions

Ein Nachteil eines gekapselten konventionellen Socket-APIs ist die Fehlerbehandlung durch Auswertung des Rückgabewerts der jeweiligen Funktionen bzw. Methoden. Auch die Definition von und Prüfung auf Timeouts erfordert je Methoden-/Funktionsaufruf vorab jeweils einen select-Aufruf. In der Klasse CSyncSocketEx finden sich nun gegenüber CSyncSocket Erweiterungen die bei Lese- und Schreiboperationen selbst eine Timeoutprüfung vornehmen, die Les- und Schreibbarkeit des Sockets generell mit den boolschen Methoden IsReadable und IsWritable abfragbar machen und auf Fehlerzustände mit CSocketExceptions reagieren.

CSecureSyncSocketEx: TLS/SSL-Verschlüsselung

Abgeleitet von CSyncSocketEx entstand die Klasse CSecureSyncSocketEx um TLS/SSL-verschlüsselte TCP-Verbindungen zu implementieren. Diese Klasse unterstützt den Betrieb als Server und Client (letztere mit oder ohne Zertifikat), sowie den Wechsel von unverschlüsseltem auf verschlüsselten Betrieb innerhalb eines Verbindung (z.B. nach dem STARTTLS-Kommando).