bind
Deklaration
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Beschreibung
Mit bind() wird der lokale Endpunkt festgelegt, das bedeutet für
Server-Anwendungen insbesondere die Portnummer, auf welcher der Server verfügbar sein wird. Aber auch
für Client-Anwendungen, die danach connect() benutzen, kann die lokale Adresse
festgelegt werden.
Parameter
sockfd |
Socket dessen lokaler Endpunkt festgelegt werden soll. |
addr |
Adresse die zugewiesen werden soll. Dies ist für Sockets der Familie AF_INET
eine Struktur vom Typ sockaddr_in, die jedoch auf
sockaddr gecastet werden muss.
|
addrlen |
Grösse der übergebenen Struktur, also z.B. sizeof(struct sockaddr_in)
bzw. der verwendeten Variable.
|
Rückgabewert
Bei erfolgreichem Aufruf ist der Rückgabewert 0, im Fehlerfall -1.
Typische Fehler
-
Die Größe der übergebenen Struktur muss passen, sonst lehnt das System den Aufruf ab. Hier
muss sockaddr_in benutzt werden, nicht etwa in_addr.
-
Die Portnummer muss in Network Byte Order angegeben werden.
-
Die IP-Adresse legt die Adresse der lokalen Netzwerkschnittstelle fest, auf der die Verbindungen akzeptiert
werden sollen, nicht die erlaubten Absender-Adressen. Soll auf allen Schnittstellen akzeptiert werden muss
INADDR_ANY angegeben werden.
-
Die lokale Adresse kann bereits belegt sein. In diesem Fall schlägt bind() mit
dem Fehlercode EADDRINUSE fehl. Siehe auch
Hintergrundwissen.
-
An Portnummern kleiner 1024 darf nur mit "root-Rechten" gebunden werden. Fehlen die Zugriffsrechte
schlägt bind() mit dem Fehlercode EACCES fehl.