24.12.2013 Aufrufe

20.3 Elementare TCP-Socket-Funktionen - Pearson Bookshop

20.3 Elementare TCP-Socket-Funktionen - Pearson Bookshop

20.3 Elementare TCP-Socket-Funktionen - Pearson Bookshop

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.

684 20 Netzwerkprogrammierung mit <strong>Socket</strong>s<br />

Die Reihenfolge, in der Server- und Clientprozess die entsprechenden <strong>Funktionen</strong> aufrufen<br />

müssen, um eine Verbindung herzustellen, ist in Abbildung 20.5 veranschaulicht.<br />

Nachfolgend werden diese <strong>Funktionen</strong> näher vorgestellt.<br />

<strong>20.3</strong>.2 Zuordnen einer lokalen Protokolladresse mit Funktion bind<br />

(Server)<br />

Die Funktion bind ordnet einem <strong>Socket</strong> eine lokale Protokolladresse zu, was bei Internet-<br />

Protokollen die Kombination aus einer IPv4- bzw. IPV6-Adresse mit einer 16-Bit <strong>TCP</strong>oder<br />

UDP-Portnummer ist.<br />

#include <br />

#include <br />

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);<br />

gibt zurück: 0 (bei Erfolg); -1 bei Fehler<br />

sockfd gibt den <strong>Socket</strong>deskriptor des entsprechenden <strong>Socket</strong>s an.<br />

Der zweite Parameter ist die Adresse der entsprechenden <strong>Socket</strong>-Adressstruktur und der<br />

dritte Parameter die Größe dieser Adressstruktur.<br />

In *my_addr kann beim Aufruf von bind die IP-Adresse und die Portnummer gezielt<br />

gesetzt sein. Es ist jedoch auch möglich, dass eine dieser beiden Komponenten oder auch<br />

beide auf 0 gesetzt sind, was bedeutet, dass man es dem Kernel überlässt, was er dafür<br />

wählt. Statt dem Wert 0 sollte man der Komponente sin_addr die Konstante INADDR_ANY<br />

(htonl(INADDR_ANY)) und der Komponente sin6_addr die Variable sin6addr_any<br />

zuweisen, die meist den Wert 0 repräsentieren. Solche INADDR_ANY- bzw. sin6addr_any-<br />

Adressen bezeichnet man als Wildcard-Adressen.<br />

Tabelle 20.6 fasst diese Möglichkeiten mit den daraus resultierenden Zuordnungen<br />

zusammen.<br />

Angabe<br />

Auswirkung<br />

sin_addr, sin6_addr<br />

sin_port, sin6_port<br />

Wildcard 0 Kernel wählt IP-Adresse und kurzlebige<br />

Portnummer<br />

Wildcard ungleich 0 Kernel wählt IP-Adresse; Portnummer<br />

festgelegt<br />

lokale IP-Adresse 0 festgelegte IP-Adresse; Kernel wählt kurzlebige<br />

Portnummer<br />

lokale IP-Adresse ungleich 0 festgelegte IP-Adresse und Portnummer<br />

Tabelle 20.6: Unterschiedliche Möglichkeiten und Auswirkungen bei Spezifikation der Protokolladresse

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!