Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

       bind - verbindet einen Namen mit einem Socket

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <sys/socket.h>

       int bind(int sockdd, const struct sockaddr *adr,
                socklen_t adrlänge);

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 adr angegebene Adresse dem Socket  zu,  auf  den
       der  Dateideskriptor  sockdd  weist.  adrlänge gibt die Größe der durch adr 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 adr-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  adr  übergebenen  Zeigers,  um
       Compiler-Warnungen zu vermeiden (siehe die folgenden BEISPIELE).

RÜCKGABEWERT

       Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben  und  errno  gesetzt,  um  den
       Fehler anzuzeigen.

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  sockdd ist kein zulässiger Dateideskriptor.

       EINVAL Der Socket ist schon an eine Adresse gebunden.

       EINVAL adrlänge ist falsch oder adr ist keine gültige Adresse für die Domain des Sockets.

       ENOTSOCK
              Der Dateideskriptor sockdd 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 adr zeigt aus dem vom Benutzer adressierbaren Adressraum heraus.

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

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

STANDARDS

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

ANMERKUNGEN

       Für Hintergrundinformationen zum Typ socklen_t siehe accept(2).

FEHLER

       Die transparenten Proxy-Optionen sind nicht beschrieben.

BEISPIELE

       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 <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <sys/socket.h>
       #include <sys/un.h>
       #include <unistd.h>

       #define MY_SOCK_PATH "/somepath"
       #define LISTEN_BACKLOG 50

       #define handle_error(msg) \
           do { perror(msg); exit(EXIT_FAILURE); } while (0)

       int
       main(void)
       {
           int                 sfd, cfd;
           socklen_t           peer_addr_size;
           struct sockaddr_un  my_addr, peer_addr;

           sfd = socket(AF_UNIX, SOCK_STREAM, 0);
           if (sfd == -1)
               handle_error("socket");

           memset(&my_addr, 0, sizeof(my_addr));
           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(my_addr)) == -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(peer_addr);
           cfd = accept(sfd, (struct sockaddr *) &peer_addr,
                        &peer_addr_size);
           if (cfd == -1)
               handle_error("accept");

           /* Code für die Behandlung eingehender Verbindungen … */

           if (close(sfd) == -1)
               handle_error("close");

           if (unlink(MY_SOCK_PATH) == -1)
               handle_error("unlink");
       }

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)

Ü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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die
       Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.