connect(2) System Calls Manual connect(2) BEZEICHNUNG connect - eine Verbindung mit einem Socket starten BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int connect(int Sockdd, const struct sockaddr *Adr, socklen_t Adrlan); BESCHREIBUNG Der Systemaufruf connect() verbindet das durch den Dateideskriptor Sockdd referenzierte Socket mit der durch Adr angegebenen Adresse. Das Argument Adrlan legt die Grosse von Adr fest. Das Format der Adresse in Adr wird durch den Adressraum des Sockets Sockdd festgelegt; siehe socket(2) fur weitere Details. Falls das Socket Sockdd vom Typ SOCK_DGRAM ist, dann werden Datagramme standardmassig an die Adresse Adr gesendet werden und auch nur von dieser Adresse empfangen. Falls das Socket vom Typ SOCK_STREAM oder SOCK_SEQPACKET ist, versucht dieser Aufruf eine Verbindung mit dem Socket herzustellen das an die angebene Adresse Adr gebunden ist. Sockets fur einige Protokolle (z.B. UNIX-Domain-Datenstrom-Sockets) konnen nur einmal erfolgreich connect() durchfuhren. Sockets fur einige Protokolle (z.B. Datagram-Sockets in den UNIX- und Internet-Domains) konnen connect() mehrfach verwenden, um ihre Zuordnung zu andern. Sockets fur einige Protokolle (z.B. TCP-Sockets sowie Datagram-Sockets in den UNIX- und Internet-Domains) konnen ihre Zuordnung losen, indem sie mit einer Adresse verbinden, wobei das Mitglied sa_family von sockaddr auf AF_UNSPEC gesetzt ist. Danach kann sich der Socket mit einer anderen Adresse verbinden (AF_UNSPEC wird unter Linux seit Version 2.2 unterstutzt). RUCKGABEWERT Falls die Verbindung oder das Anbinden gelingt, wird Null zuruckgeliefert. Im Fehlerfall wird -1 zuruckgeliefert und errno gesetzt, um den Fehler anzuzeigen. FEHLER Die folgenden Fehler sind nur allgemeine Socket-Fehler. Es mag andere, domanenspezifische Fehlercodes geben. EACCES Fur UNIX-Domain-Sockets, die durch einen Pfadnamen identifiziert werden: Auf die Socket-Datei wurde das Schreiben nicht gestattet oder das Suchen in einer der Dateien des Pfad-Prafixes wurde verwehrt (siehe auch path_resolution(7)). EACCES EPERM Der Benutzer versuchte eine Verbindung zu einer Broadcast-Adresse, ohne den Socket-Broadcast-Schalter aktiviert zu haben oder die Verbindungsanfrage scheiterte wegen einer lokalen Firewall-Regel. EACCES Es kann auch zuruckgegeben werden, falls eine SELinux-Richtlinie eine Verbindung verweigerte (falls es beispielsweise eine Richtlinie gibt, die regelt, dass ein HTTP-Proxy sich nur mit Ports verbinden kann, die einem HTTP-Server zugeordnet sind, und der Proxy versucht, sich auf einen anderen Port zu verbinden). EADDRINUSE Die lokale Adresse ist bereits in Benutzung. EADDRNOTAVAIL (Internet Domain Sockets) Das durch sockdd referenzierte Socket war bisher nicht an eine Adresse gebunden und beim Versuch, es an einen kurzlebigen Port zu binden, wurde festgestellt, dass alle Portnummern in dem Portbereich fur kurzlebige Portnummern derzeit verwendet werden. Lesen Sie die Erorterung von /proc/sys/net/ipv4/ip_local_port_range in ip(7). EAFNOSUPPORT Die ubergebene Adresse hatte nicht die korrekte Adressfamilie in ihrem Feld sa_family. EAGAIN Fur nicht blockierende UNIX-Domain-Sockets ist der Socket nicht blockierend und die Verbindung kann nicht sofort vollzogen werden. Fur andere Socket-Familien gibt es unzureichende Eintrage in dem Routing-Zwischenspeicher. EALREADY Das Socket ist nicht blockierend und ein vorhergehender Verbindungsversuch wurde noch nicht beendet. EBADF Sockdd ist kein zulassiger offener Dateideskriptor. ECONNREFUSED Ein connect() auf einem Stream-Socket fand keinen, der auf der Adresse in der Ferne wartete. EFAULT Die Adresse der Socket-Struktur liegt ausserhalb des Adressraums des Benutzers. EINPROGRESS Der Socket ist nichtblockierend und die Verbindung kann nicht sofort aufgebaut werden. (UNIX-Domain-Sockets schlagen stattessen mit EAGAIN fehl.) Der Socket kann zum Schreiben ausgewahlt werden und mittels select(2) oder poll(2) die erfolgreiche Verbindung abgefragt werden. Nachdem select(2) die Beschreibbarkeit anzeigt, lesen Sie mit getsockopt(2) die SO_ERROR-Option auf der Ebene SOL_SOCKET, um festzustellen, ob connect() erfolgreich (SO_ERROR ist Null) oder erfolglos (SO_ERROR ist einer der ublichen hier aufgefuhrten Fehlercodes, welche die Grunde fur das Scheitern angeben) abgeschlossen wurde. EINTR Der Systemaufruf wurde durch ein abgefangenes Signal unterbrochen; siehe signal(7). EISCONN Der Socket ist bereits verbunden. ENETUNREACH Das Netz ist nicht erreichbar. ENOTSOCK Der Dateideskriptor sockdd zeigt nicht auf ein Socket. EPROTOTYPE Die Socket-Art unterstutzt das angefragte Kommunikationsprotokoll nicht. Dieser Fehler kann beispielsweise bei dem Versuch auftreten, ein UNIX-Domain-Datagramm-Socket mit einem Stream-Socket zu verbinden. ETIMEDOUT Zeituberschreitung (timeout) wahrend des versuchten Verbindungsaufbaus. Der Server ist vielleicht zu beschaftigt, um neue Verbindungen aufzubauen. Beachten Sie, dass fur IP-Sockets das Timeout sehr lang sein kann, wenn auf dem Server >>Syncookies<< aktiviert sind. STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, SVr4, 4.4BSD, (connect() erschien erstmalig in 4.2BSD). ANMERKUNGEN Falls connect() fehlschlagt, sollten Sie den Zustand des Sockets als unspezifiziert ansehen. Portable Anwendungen sollten das Socket schliessen und ein neues fur die Wiederverbindung erstellen. BEISPIELE Ein Beispiel fur die Verwendung von connect() wird in getaddrinfo(3) vorgestellt. SIEHE AUCH accept(2), bind(2), getsockname(2), listen(2), socket(2), path_resolution(7), selinux(8) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Helge Kreutzmann und Mario Blattermann 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 die Mailingliste der Ubersetzer . Linux man-pages 6.06 1. November 2023 connect(2)