Provided by: manpages-de-dev_0.10-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 gültiger 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 zu wenig 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

       Diese   Seite   ist   Teil   der  Veröffentlichung  3.32  des  Projekts
       Linux-man-pages. Eine Beschreibung des Projekts und Informationen,  wie
       Fehler     gemeldet     werden     können,     finden     sich    unter
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde  von  Hanno  Wagner
       <wagner@bidnix.bid.fh-hannover.de>       und       Martin       Schauer
       <Martin.E.Schauer@gmx.de> 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>.