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