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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

224 4 Gr<strong>und</strong>lagen der Socket-Programmierung<br />

Tabelle 4.7. Die Socket-Optionen der SOL_SOCKET-Ebene<br />

Name Beschreibung assoz. Datenstruktur<br />

SO BROADCAST Broadcast-Datagramme zulassen<br />

int (boolsch)<br />

SO DEBUG Debug-Tracing einschalten int (boolsch)<br />

SO DONTROUTE systemeigene Routing-Rabelle umgehen int (boolsch)<br />

SO KEEPALIVE TCP-Verbindungen periodisch testen int (boolsch)<br />

SO LINGER Verhalten der close()-Funktion anpassen struct linger<br />

SO OOBINLINE Out-Of-Band-Daten nicht bevorzugen int (boolsch)<br />

SO RCVBUF Größe des Empfangspuffers bestimmen int<br />

SO RCVLOWAT Empfangspuffer-Niedrigwassermarke setzen int<br />

SO RCVTIMEO Timeout für Datenempfang bestimmen struct timeval<br />

SO REUSEADDR Wiederverwendung lokaler Socket-Adressen int (boolsch)<br />

SO SNDBUF Größe des Sendepuffers bestimmen int<br />

SO SNDLOWAT Sendepuffer-Niedrigwassermarke setzen int<br />

SO SNDTIMEO Timeout für Datenversand bestimmen struct timeval<br />

sich dabei in der Mehrzahl der Fälle um einfache Integer-Werte, in denen ein<br />

boolscher Wert gespeichert wird.<br />

War der Aufruf von setsockopt() erfolgreich, so liefert die Funktion den<br />

Rückgabewert 0. DerRückgabewert -1 zeigt das Auftreten eines Fehlers an,<br />

die genaue Fehlerursache läßt sich dann über die errno-Variable er<strong>mit</strong>teln.<br />

Die Socket-Optionen SO_RCVTIMEO <strong>und</strong> SO_SNDTIMEO<br />

Mit Hilfe der beiden Socket-Optionen SO_RCVTIMEO <strong>und</strong> SO_SNDTIMEO kann<br />

das Senden <strong>und</strong> Empfangen von Daten <strong>mit</strong> einem Timeout verknüpft werden.<br />

Die Optionen werden von den meisten POSIX-konformen <strong>Unix</strong>-Systemen unterstützt<br />

<strong>und</strong> das gewünschte Timeout-Intervall wird dabei wie bei select()<br />

in der Form einer timeval-Struktur übergeben. 30 Ist die timeval-Struktur<br />

<strong>mit</strong> Nullwerten initialisiert, so wird die Timeout-Funktionalität für den betreffenden<br />

Socket deaktiviert.<br />

Das nachfolgende Programmfragment zeigt den Einsatz der setsockopt()-<br />

Funktion am Beispiel eines Timeouts für den Datenempfang. Selbstverständlich<br />

ist es ausreichend, die Socketoption ein einziges Mal pro Socket zu setzen.<br />

Der angegebene Timeout-Wert wirkt nachfolgend auf alle Empfangsoperationen,<br />

die <strong>mit</strong> dem modifizierten Socket arbeiten.<br />

30 Die Wahl der timeval-Struktur ist wie bei select() dadurch begründet, daß<br />

die beiden Socket-Optionen auf einigen Systemen bereits vor Einführung der<br />

timespec-Struktur unterstützt wurde. Aus Gründen der Rückwärtskompatibilität<br />

wurde die Datenstruktut im POSIX-Standard beibehalten.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!