Provided by: manpages-de-dev_0.10-1_all bug

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>.