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

Erfolgreiche ePaper selbst erstellen

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

<strong>20.3</strong> <strong>Elementare</strong> <strong>TCP</strong>-<strong>Socket</strong>-<strong>Funktionen</strong> 687<br />

dem Fehler ECONNREFUSED mitgeteilt wird. BSD legte früher als maximale Größe von<br />

backlog 5 fest. Bei heutigen Servern im Internet, die Hunderttausende von Anforderungen<br />

in der Stunde erhalten, muss man für backlog einen größeren Wert angeben, wie etwa<br />

16, 20 oder noch größer.<br />

Die Funktion accept macht aus einer anstehenden Verbindung eine wirkliche Verbindung,<br />

die auch einen neuen <strong>Socket</strong>deskriptor erhält. Dieser neue <strong>Socket</strong>deskriptor, der<br />

als Rückgabewert geliefert wird, erbt alle Attribute vom <strong>Socket</strong>, das zuvor mit listen<br />

abgehört wurde.<br />

Den als erstes Argument übergebenen <strong>Socket</strong>deskriptor bezeichnet man als horchenden<br />

<strong>Socket</strong> und den von accept zurückgegebenen als verbundenen <strong>Socket</strong>. Auf dem horchenden<br />

<strong>Socket</strong> kann der Server weitere Verbindungsanforderungen akzeptieren, wobei jedes Mal<br />

ein neues verbundenes <strong>Socket</strong> mit einem neuen <strong>Socket</strong>deskriptor zur Verfügung gestellt<br />

wird. Beendet der Server die Bedienung eines Clients, wird nur das jeweilige verbundene<br />

<strong>Socket</strong> geschlossen.<br />

Die Parameter addr und addrlen geben die Adressen an, in die vom Systemkern die<br />

Adresse des Clients zu schreiben ist. Es ist zu beachten, dass der Parameter addrlen zwei<br />

<strong>Funktionen</strong> hat: Beim Aufruf legt er die Länge der übergebenen Adressstruktur addr fest,<br />

und bei der Rückkehr von accept enthält er die aktuelle Anzahl von Bytes, die in addr<br />

geschrieben wurden. Deswegen ist dieser Parameter auch als Zeiger deklariert.<br />

<strong>20.3</strong>.4 Aufbauen einer Verbindung zum Server mit connect (Client)<br />

Auch ein Client könnte nach dem Erzeugen eines <strong>Socket</strong>s mit der Funktion bind diesem<br />

<strong>Socket</strong> eine Adresse zuweisen. Da diese lokale Adresse aber normalerweise für den<br />

Client nicht von Interesse ist, lässt er diesen Schritt oft aus und überlässt es dem Systemkern,<br />

irgendeine passende Adresse für das <strong>Socket</strong> zu finden. In jedem Fall muss jedoch<br />

ein Client die Funktion connect aufrufen, um eine Verbindung zum Server herzustellen.<br />

#include <br />

#include <br />

int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);<br />

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

Die Parameter beim connect-Aufruf spezifizieren das zu verbindende <strong>Socket</strong> und die Zieladresse<br />

des Servers.<br />

Hat ein Prozess die Arbeit mit einem <strong>Socket</strong> beendet, sollte er dieses mit close schließen,<br />

um die damit verbundenen Ressourcen wieder freizugeben.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!