BEZEICHNUNG¶
connect - eine Verbindung mit einem Socket starten
ÜBERSICHT¶
#include <sys/types.h> /* Siehe ANMERKUNGEN */
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
BESCHREIBUNG¶
Der Systemaufruf
connect() verbindet das durch den Dateideskriptor
sockfd referenzierte Socket mit der durch
addr angegebenen
Adresse. Das Argument
addrlen legt die Größe von
addr
fest. Das Format der Adresse in
addr wird durch den Adressraum des
Sockets
sockfd festgelegt; siehe
socket(2) für weitere
Details.
Falls das Socket
sockfd vom Typ
SOCK_DGRAM ist, dann werden
Datagramme standardmäßig an die Adresse
addr 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
addr
gebunden ist.
Generell können verbindungsbasierte Protokoll-Sockets
connect() nur
einmal erfolgreich aufrufen; verbindungslose Protokoll-Sockets können
connect() mehrmals aufrufen um ihre Zuordnungen zu ändern.
Verbindungslose Sockets können ihre Zuordnung lösen, indem sie bei
der Verbindung mit einer Adresse die Komponente
sa_family von
sockaddr auf
AF_UNSPEC setzen (unter Linux seit Kernel 2.2
unterstützt).
RÜCKGABEWERT¶
Falls die Verbindung oder das Anbinden gelingt, wird Null zurückgeliefert.
Im Fehlerfall wird -1 zurückgeliefert und
errno entsprechend
gesetzt.
FEHLER¶
Die folgenden Fehler sind nur allgemeine Socket-Fehler. Es mag andere,
domänenspezifische Fehlercodes geben.
- EACCES
- Für 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-Präfixes
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.
- EADDRINUSE
- Die lokale Adresse ist bereits in Benutzung.
- EAFNOSUPPORT
- Die übergebene Adresse hatte nicht die korrekte
Adressfamilie in ihrem Feld sa_family.
- EAGAIN
- Fehlende freie lokale Ports oder unzureichende
Einträge im »Routing Cache«. Für AF_INET siehe
die Beschreibung von /proc/sys/net/ipv4/ip_local_port_range;
ip(7) für Informationen zur Erhöhung der Anzahl der
lokalen Ports.
- EALREADY
- Das Socket ist nicht blockierend und ein vorhergehender
Verbindungsversuch wurde noch nicht beendet.
- EBADF
- Der Dateideskriptor ist kein gültiger Index in der
Deskriptorentabelle.
- ECONNREFUSED
- Niemand wartet auf der Adresse in der Ferne.
- EFAULT
- Die Adresse der Socket-Struktur liegt außerhalb des
Adressraums des Benutzers.
- EINPROGRESS
- Der Socket ist nichtblockierend und die Verbindung kann
nicht sofort aufgebaut werden. Der Socket kann zum Schreiben
ausgewählt 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 abgeschlossen wurde (SO_ERROR ist
Null) oder erfolglos ( SO_ERROR ist einer der üblichen hier
aufgeführten Fehlercodes, welche die Gründe für das
Scheitern angeben).
- 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 ist nicht einem Socket zugeordnet.
- ETIMEDOUT
- Zeitüberschreitung (timeout) während des
versuchten Verbindungsaufbaus. Der Server ist vielleicht zu
beschäftigt um neue Verbindungen aufzubauen. Beachten Sie, dass
für IP-Sockets das Timeout sehr lang sein kann, wenn auf dem Server
»Syncookies« aktiviert sind.
SVr4, 4.4BSD, (die Funktion
connect() erschien erstmalig in 4.2BSD),
POSIX.1-2001.
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
connect() ist tatsächlich ein
int
(und das haben auch 4.x BSD, Libc4 und Libc5). Einige POSIX-Verwirrung
führt zu dem derzeitigen
socklen_t, der auch von Glibc verwandt
wird. Sehe auch
accept(2).
BEISPIEL¶
Ein Beispiel für die Verwendung von
connect() wird in
getaddrinfo(3) vorgestellt.
SIEHE AUCH¶
accept(2),
bind(2),
getsockname(2),
listen(2),
socket(2),
path_resolution(7)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 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 Helge Kreutzmann
<debian@helgefjell.de> und Martin Eberhard 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>.