#include<sys/types.h>
#include<sys/socket.h>
int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
sockfd
ist der Filedescriptor des Socket der gebunden werden soll.
my_addr
ist die Adresse an die der Socket gebunden werden soll.
Dabei wird für IP-Adressen das struct sockaddr_in
(übrigens
im Header 'netinet/in.h' definiert) verwendet und beim Aufruf von bind() in ein
struct sockaddr
(bzw. einen Pointer
darauf) gecastet (siehe Beispiel). Normalerweise wird die IP-Adresse auf
INADDR_ANY
gesetzt (es ist also jede IP-Adresse gültig) und nur ein Port spezifiziert, an
den der Socket gebunden werden soll (diese Art von Bindung ist unbedingt nötig,
bevor auf einen SOCK_STREAM
Socket
accept() aufgerufen wird).
addrlen
spezifiziert die Größe von my_addr
in Bytes.
$ man 2 bind
struct sockaddr_in addr; /* Die Struktur in der eine Internetadresse gespeichert wird */
addr.sin_family = PF_INET; /* Es handelt sich bei der Adresse um eine IPv4 Internetadresse */
addr.sin_addr.s_addr = INADDR_ANY; /* Jede Internetadresse ist gültig */
addr.sin_port = 0; /* Jeder Port ist gültig */
if(bind(socketfd, (struct sockaddr *)&addr, sizeof(addr)) == -1){
/* Fehler */
}
/* Alles hat geklappt; nun ist der Socket gebunden und kann zum senden verwendet
* werden. Obiges Beispiel funktioniert nur mit UDP Sockets, da ein TCP Socket
* an einen bestimmten Port gebunden werden muss.
* Anmerkung: für normale Benutzer sind nur Portnummern größer als 1024
* gültig.
*/