20.3 Elementare TCP-Socket-Funktionen - Pearson Bookshop
20.3 Elementare TCP-Socket-Funktionen - Pearson Bookshop
20.3 Elementare TCP-Socket-Funktionen - Pearson Bookshop
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