Provided by: manpages-de-dev_2.16-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.

       EADDRINUSE
              (Internet-Domain-Sockets)  Die  Portnummer  wurde  in der Socket-Adressstruktur als
              Null  angegeben,  aber  beim  Versuch,  einen  flüchtigen  Port  zu  binden,  wurde
              festgestellt,  dass  alle Portnummern im flüchtigen Port-Bereich in Benutzung sind.
              Siehe die Erläuterungen zu /proc/sys/net/ipv4/ip_local_port_range ip(7).

       EBADF  sockfd ist kein zulässiger Dateideskriptor.

       EINVAL Der Socket ist schon an eine Adresse gebunden.

       EINVAL addrlen ist falsch oder addr ist keine gültige Adresse für die Domain des Sockets.

       ENOTSOCK
              Der Dateideskriptor sockfd zeigt nicht auf 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.

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

       ENAMETOOLONG
              addr ist zu lang.

       ENOENT Eine Komponente in dem Verzeichnispräfix des Socket-Pfadnames existiert nicht.

       ENOMEM Es war nicht genügend Kernelspeicher 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

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (bind() erschien erstmals in 4.2BSD).

ANMERKUNGEN

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

       Für Hintergrundinformationen zum Typ socklen_t siehe 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  5.03  des  Projekts  Linux-man-pages.  Eine
       Beschreibung  des  Projekts,  Informationen,  wie  Fehler gemeldet werden können sowie die
       aktuelle Version dieser Seite finden sich unter https://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>.