05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

6.3 Open<strong>SSL</strong>-Basisfunktionalität 329<br />

also FALSE anzeigt, dann kann man daraus schließen, daß BIO_read() <strong>mit</strong><br />

dem Rückgabewert 0 einen geschlossenen Socket angezeigt hat, daß also die<br />

bestehende Netzwerkverbindung von der Gegenstelle terminiert wurde. Liefert<br />

BIO_should_retry() dagegen TRUE, so kann die Leseoperation zu einem<br />

späteren Zeitpunkt wiederholt werden. Dies könnte z. B. dann der Fall sein,<br />

wenn die BIO-Kette bereits Daten von der Gegenseite empfangen hat, aber insgesamt<br />

noch nicht genügend Daten vorliegen, um einen Dechiffriervorgang abzuschließen.<br />

Für diesen Fall würde dann auch das Makro BIO_should_read()<br />

den Wert TRUE liefern <strong>und</strong> da<strong>mit</strong> darauf hinweisen, daß für den Abschluß der<br />

Operation erst noch weitere Daten gelesen werden müssen. Anders herum gibt<br />

BIO_should_write() Auskunft, ob ein BIO etwa noch weitere Daten benötigt,<br />

um einen Chiffriervorgang abzuschließen.<br />

Die genaue Interpretation der Ergebnisse der Makros BIO_should_read()<br />

<strong>und</strong> BIO_should_write() hängt immer vom Typ des verursachenden BIO-<br />

Objekts ab. Dies gilt insbesondere für das Makro BIO_should_io_special(),<br />

welches bestimmte Spezialsituationen, also Vorkommnisse, die nicht dierkt <strong>mit</strong><br />

dem Schreiben oder Lesen von Daten zu tun haben, anzeigt.<br />

Die gute Nachricht zum Schluß: Sofern auf die Quelle/Senke (eine Datei, ein<br />

Socket, ...) einer BIO-Kette im synchronen, blockierenden Modus zugegriffen<br />

wird, wird das BIO niemals eine Wiederholung der Ein-/Ausgabeoperation<br />

verlangen, da die zugr<strong>und</strong>eliegenden Operationen dies für blockierende Lese<strong>und</strong><br />

Schreiboperationen ebenfalls nicht vorsehen. Die schlechte Nachricht: BIO-<br />

Objekte zur <strong>SSL</strong>-Kommunikation bilden die Ausnahme zu dieser Regel. Hier<br />

kann es auch bei blockierenden Ein- <strong>und</strong> Ausgaben zu Wiederholungsanforderungen<br />

kommen, etwa wenn während eines blockierenden BIO_read() ein<br />

<strong>SSL</strong>-Handshake auftritt. Aber auch hier steht Abhilfe parat, denn zur Vorbeugung<br />

kann für die <strong>SSL</strong>-Verbindung das Flag <strong>SSL</strong>_MODE_AUTO_RETRY gesetzt<br />

werden, durch welche auch im Falle der <strong>SSL</strong>-Kommunikation keine Wiederholungsanforderungen<br />

mehr auftreten.<br />

6.3.4 BIO-Quellen/Senken <strong>und</strong> BIO-Filter<br />

Wie bereits weiter oben erläutert, wird durch einen Aufruf von BIO_new() ein<br />

neues BIO-Objekt erstellt. Der Typ des BIO-Objekts wird über eine Hilfsfunktion<br />

an die BIO_new()-Funktion übergeben. Im folgenden werfen wir einen Blick<br />

auf die wichtigsten BIO-Typen für Quellen/Senken <strong>und</strong> Filter <strong>und</strong> besprechen<br />

die zugehörigen BIO-Objekte für Dateien <strong>und</strong> <strong>Sockets</strong> sowie zur Datenpufferung<br />

<strong>und</strong> zur <strong>SSL</strong>-Kommunikation. Die Hilfsfunktionen zum Erstellen neuer<br />

Quellen/Senken folgen dabei dem Namensmuster BIO_s_*(), die für Filter<br />

dem Muster BIO_f_*(). Bevor die frisch erzeugten BIO-Objekte tatsächlich<br />

zur Ein-/Ausgabe genutzt werden können, müssen sie allerdings meist noch<br />

geeignet initialisiert werden.<br />

Aus der Vielzahl verschiedener BIO-Objekte (<strong>mit</strong>samt der jeweils zugehörigen<br />

Hilfsfunktionen) greifen wir die folgenden wichtigen Vertreter heraus:

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!