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.

332 6 Netzwerkprogrammierung <strong>mit</strong> <strong>SSL</strong><br />

Für BIO-Objekte vom Typ Socket-BIO steht also ein weiterer Satz von BIO-<br />

Funktionen zur Verfügung, von denen BIO_s_accept() <strong>und</strong> BIO_s_connect()<br />

der BIO_new()-Funktion einen Bauplan für einen horchenden Serversocket<br />

bzw. einen aktiven Clientsocket liefern. Nachdem ein neuer Socket-BIO erstellt<br />

wurde, muß dieser noch adäquat initialisiert werden. Sowohl für Clientals<br />

auch für Serversockets kann dem BIO dazu einfach per BIO_set_fd() ein<br />

bereits existierender Socket zugewiesen werden. Neben dem zu bearbeitenden<br />

BIO b erwartet die Funktion dazu den Socketdeskriptor fd sowie eines der<br />

Flags BIO_CLOSE oder BIO_NOCLOSE, die anzeigen daß der Socket (nicht) geschlossen<br />

werden soll, wenn das BIO-Objekt b freigegeben wird. BIO_set_fd()<br />

ist als Makro realisiert <strong>und</strong> liefert immer den Rückgabewert 1.<br />

#include<br />

<br />

BIO_METHOD *BIO_s_connect( void );<br />

long BIO_set_fd( BIO *b, int fd, long flags );<br />

long BIO_set_conn_hostname( BIO *b, char *host_port );<br />

long BIO_set_conn_ip( BIO *b, char *ip );<br />

long BIO_set_conn_port( BIO *b, char *port );<br />

long BIO_set_conn_int_port( BIO *b, char *port );<br />

BIO *BIO_new_connect( char *host_port );<br />

int BIO_do_connect( BIO *b );<br />

Soll sich das BIO dagegen selbst um das Erstellen eines geeigneten <strong>Sockets</strong><br />

kümmern, so können dem Objekt <strong>mit</strong>tels BIO_set_conn_hostname() die<br />

gewünschten Zielkoordinaten <strong>mit</strong> auf den Weg gegeben werden. Die Funktion<br />

erwartet hierfür neben dem BIO b einen Hostnamen (oder eine IP-Adresse)<br />

sowie ggf. den Port des Gegenübers. Der String-Parameter host_port hat dazu<br />

die Form "hostname" oder "hostname:port", wobei Hostname ein DNS-<br />

Name oder eine IP-Adresse sein kann <strong>und</strong> Port entweder als Servicename oder<br />

als numerischer Wert angegeben werden darf. Alternativ stehen für diese Aufgabe<br />

auch die Funktionen BIO_set_conn_ip(), BIO_set_conn_port() <strong>und</strong><br />

BIO_set_conn_int_port() zur Verfügung, <strong>mit</strong> deren Hilfe Hostname/IP-<br />

Adresse <strong>und</strong> Port auf verschiedenen Wegen gesetzt werden können. Alle Funktionen<br />

(bzw. eigentlich Makros) liefern immer den Rückgabewert 1.<br />

Die Hilfsfunktion BIO_new_connect() vereint die beiden BIO-Funktionen<br />

BIO_new() <strong>und</strong> BIO_set_conn_hostname() in einem einzigen Funktionsaufruf<br />

<strong>und</strong> erwartet dazu in host_port den Hostnamen (oder die IP-Adresse)<br />

sowie den Port des Gegenübers. Als Ergebnis wird bei Erfolg ein neues BIO-<br />

Objekt geliefert oder im Fehlerfall ein Nullzeiger zurückgegeben.<br />

Das neue Connect-BIO baut schließlich durch einen Aufruf der Hilfsfunktion<br />

BIO_do_connect() eine neue Socketverbindung zur zuvor hinterlegten Ziel-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!