Provided by: manpages-de-dev_1.4-1_all bug

BEZEICHNUNG

       bind - verbindet einen Namen mit einem Socket

ÜBERSICHT

       #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 Größe 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 für die Bindung/Zuweisung von Namen variieren zwischen den Adressfamilien. Ziehen
       Sie für detaillierte Informationen die Handbuch-Einträge in Abschnitt 7 zu Rate. Für AF_INET siehe ip(7),
       für AF_INET6 siehe ipv6(7), für AF_UNIX siehe unix(7), für AF_APPLETALK siehe ddp(7), für AF_PACKET siehe
       packet(7), für AF_X25 siehe x25(7) und für AF_NETLINK siehe netlink(7).

       Die tatsächlich für das addr-Argument übergebene  Struktur  wird  von  der  Adressfamilie  abhängen.  Die
       sockaddr-Struktur ist ungefähr 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  übergebenen  Zeigers,  um
       Compiler-Warnungen zu vermeiden (siehe das folgende BEISPIEL).

RÜCKGABEWERT

       Bei Erfolg wird Null zurückgegeben. Bei  einem  Fehler  wird  -1  zurückgegeben  und  errno  entsprechend
       gesetzt.

FEHLER

       EACCES Die Adresse ist geschützt und der Benutzer ist nicht der Super-User.

       EADDRINUSE
              Die angegebene Adresse wird schon verwendet.

       EBADF  sockfd ist kein zulässiger Deskriptor.

       EINVAL Der Socket ist schon an eine Adresse gebunden.

       ENOTSOCK
              sockfd ist ein Deskriptor für eine Datei, nicht für ein Socket.

       Die folgenden Fehlermeldungen sind spezifisch für UNIX Domain Sockets (AF_UNIX):

       EACCES Eine Komponente des Pfad-Präfix 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 gehörte nicht zur AF_UNIX-Familie.

       ELOOP  Bei der Auflösung von addr wurden zu viele symbolische Verknüpfungen gefunden.

       ENAMETOOLONG
              addr ist zu lang.

       ENOENT Die Datei existiert nicht.

       ENOMEM Es war nicht genügend Kernel-Speicher verfügbar.

       ENOTDIR
              Eine Komponente des Pfad-Präfixes ist kein Verzeichnis.

       EROFS  Der Inode des Sockets würde 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 benötigen einige historische Implementierungen (BSD) diese Header-Datei. Es wird
       empfohlen, sie für 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 führte zum gegenwärtigen socklen_t, das auch  von  Glibc  verwendet  wird
       (siehe auch accept(2)).

FEHLER

       Die transparenten Proxy-Optionen sind nicht beschrieben.

BEISPIEL

       Ein Beispiel für 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 zurücksetzen */
           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 können 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 für die Behandlung eingehender Verbindungen ... */

           /* Wenn er nicht mehr gebraucht wird, sollte der Pfadname
              des Sockets (MY_SOCK_PATH) mit unlink(2) oder remove(3)
              gelöscht 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

       This  page  is  part  of  release  3.54 of the Linux man-pages project. A description of the project, and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Hanno Wagner  <wagner@bidnix.bid.fh-hannover.de>,
       Martin  Eberhard  Schauer  <Martin.E.Schauer@gmx.de> und Mario Blättermann <mario.blaettermann@gmail.com>
       erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder  neuer
       bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn  Sie  Fehler  in  der  Übersetzung  dieser  Handbuchseite  finden, schicken Sie bitte eine E-Mail an
       <debian-l10n-german@lists.debian.org>.

Linux                                           28. Dezember 2007                                        BIND(2)