Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
bind - verbindet einen Namen mit einem Socket
"UBERSICHT
#include <sys/types.h> /* Siehe ANMERKUNGEN */
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
BESCHREIBUNG
Wenn ein Socket mit socket(2) erstellt wird, existiert er in einem
Namensraum (Adressfamilie), ihm wurde aber noch keine Adresse
zugewiesen. bind() weist die von addr angegebene Adresse dem Socket zu,
auf den der Dateideskriptor sockfd weist. addrlen gibt die GroBe der
durch addr bestimmten Adress-Struktur in Byte an. Traditionell wird
diese Operation als >>zuweisen eines Namens zu einem Socket<<
bezeichnet.
Es ist normalerweise notwendig, eine lokale Adresse mittels bind()
zuzuweisen, bevor ein SOCK_STREAM-Socket Verbindungen annehmen kann
(siehe accept(2)).
Die verwendeten Regeln fur die Bindung/Zuweisung von Namen variieren
zwischen den Adressfamilien. Ziehen Sie fur detaillierte Informationen
die Handbuch-Eintrage in Abschnitt 7 zu Rate. Fur AF_INET siehe ip(7),
fur AF_INET6 siehe ipv6(7), fur AF_UNIX siehe unix(7), fur AF_APPLETALK
siehe ddp(7), fur AF_PACKET siehe packet(7), fur AF_X25 siehe x25(7)
und fur AF_NETLINK siehe netlink(7).
Die tatsachlich fur das addr-Argument ubergebene Struktur wird von der
Adressfamilie abhangen. Die sockaddr-Struktur ist ungefahr wie folgt
definiert:
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
Der einzige Zweck dieser Struktur ist die Typumwandlung des in addr
ubergebenen Zeigers, um Compiler-Warnungen zu vermeiden (siehe das
folgende BEISPIEL).
R"UCKGABEWERT
Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1
zuruckgegeben und errno entsprechend gesetzt.
FEHLER
EACCES Die Adresse ist geschutzt und der Benutzer ist nicht der
Super-User.
EADDRINUSE
Die angegebene Adresse wird schon verwendet.
EBADF sockfd ist kein gultiger Deskriptor.
EINVAL Der Socket ist schon an eine Adresse gebunden.
ENOTSOCK
sockfd ist ein Deskriptor fur eine Datei, nicht fur ein Socket.
Die folgenden Fehlermeldungen sind spezifisch fur UNIX Domain Sockets
(AF_UNIX):
EACCES Eine Komponente des Pfad-Prafix darf nicht durchsucht werden.
(siehe auch path_resolution(7))
EADDRNOTAVAIL
Es wurde eine nicht vorhandene Schnittstelle angefordert oder
die Adresse war keine lokale Adresse.
EFAULT addr zeigt aus dem vom Benutzer adressierbaren Adressraum
heraus.
EINVAL Die addrlen war falsch oder der Socket gehorte nicht zur
AF_UNIX-Familie.
ELOOP Bei der Auflosung von addr wurden zu viele symbolische
Verknupfungen gefunden.
ENAMETOOLONG
addr ist zu lang.
ENOENT Die Datei existiert nicht.
ENOMEM Es war zu wenig Kernel-Speicher verfugbar.
ENOTDIR
Eine Komponente des Pfad-Prafixes ist kein Verzeichnis.
EROFS Der Inode des Sockets wurde sich auf einem nur lesbaren
(read-only) Dateisystem befinden.
KONFORM ZU
SVr4, 4.4BSD, POSIX.1-2001 (bind() erschien erstmals in 4.2BSD).
ANMERKUNGEN
POSIX.1-2001 erfordert nicht, dass <sys/types.h> eingebunden wird.
Diese Header-Datei ist in Linux nicht erforderlich. Allerdings
benotigen einige historische Implementierungen (BSD) diese
Header-Datei. Es wird empfohlen, sie fur portierbare Anwendungen
einzubinden.
Das dritte Argument von bind() ist in Wirklichkeit ein int (und so ist
es auch in 4.x BSD, Libc4 und Libc5). Einige POSIX-Verwirrung fuhrte
zum gegenwartigen socklen_t, das auch von Glibc verwendet wird (siehe
auch accept(2)).
FEHLER
Die transparenten Proxy-Optionen sind nicht beschrieben.
BEISPIEL
Ein Beispiel fur die Verwendung von bind() mit Internet Domain Sockets
finden Sie in getaddrinfo(3).
Das folgende Beispiel zeigt, wie ein Stream Socket in die UNIX-Domain
(AF_UNIX) eingebunden wird und Verbindungen annimmt:
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MY_SOCK_PATH "/somepath"
#define LISTEN_BACKLOG 50
#define handle_error(msg) \
do { perror(msg); exit(EXIT_FAILURE); } while (0)
int
main(int argc, char *argv[])
{
int sfd, cfd;
struct sockaddr_un my_addr, peer_addr;
socklen_t peer_addr_size;
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sfd == -1)
handle_error("socket");
memset(&my_addr, 0, sizeof(struct sockaddr_un));
/* Struktur zurucksetzen */
my_addr.sun_family = AF_UNIX;
strncpy(my_addr.sun_path, MY_SOCK_PATH,
sizeof(my_addr.sun_path) - 1);
if (bind(sfd, (struct sockaddr *) &my_addr,
sizeof(struct sockaddr_un)) == -1)
handle_error("bind");
if (listen(sfd, LISTEN_BACKLOG) == -1)
handle_error("listen");
/* Jetzt konnen wir eingehende Verbindungen
nacheinander mit accept(2) annehmen. */
peer_addr_size = sizeof(struct sockaddr_un);
cfd = accept(sfd, (struct sockaddr *) &peer_addr,
&peer_addr_size);
if (cfd == -1)
handle_error("accept");
/* Code fur die Behandlung eingehender Verbindungen ... */
/* Wenn er nicht mehr gebraucht wird, sollte der Pfadname
des Sockets (MY_SOCK_PATH) mit unlink(2) oder remove(3)
geloscht werden */
}
SIEHE AUCH
accept(2), connect(2), getsockname(2), listen(2), socket(2),
getaddrinfo(3), getifaddrs(3), ip(7), ipv6(7), path_resolution(7),
socket(7), unix(7)
KOLOPHON
Diese Seite ist Teil der Veroffentlichung 3.32 des Projekts
Linux-man-pages. Eine Beschreibung des Projekts und Informationen, wie
Fehler gemeldet werden konnen, finden sich unter
http://www.kernel.org/doc/man-pages/.
"UBERSETZUNG
Die deutsche Ubersetzung dieser Handbuchseite wurde von Hanno Wagner
<wagner@bidnix.bid.fh-hannover.de> und Martin Schauer
<Martin.E.Schauer@gmx.de> erstellt.
Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General
Public License Version 3 oder neuer bezuglich der Copyright-
Bedingungen. Es wird KEINE HAFTUNG ubernommen.
Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden,
schicken Sie bitte eine E-Mail an <debian-l10n-
german@lists.debian.org>.