|
Beschreibung
Mit connect() initiiert ein Prozess über einen Socket die Kommunikation mit einem anderen Prozess.
Der Parameter s bezeichnet den Socket, über den der Prozess die Kommunikation mit einem anderen Prozess initiiert.
name ist ein Zeiger auf die Adresse des Kommunikationspartners. *name ist eine Adresse in der Kommunikationsdomäne des Sockets, zu dem die Verbindung initiiert werden soll. Jede Kommunikationsdomäne interpretiert den Parameter name auf seine eigene Art.
namelen enthält die Länge (in Bytes) der Adresse des Kommunikationspartners.
Je nachdem, ob es sich um einen Socket vom Typ SOCK_STREAM oder SOCK_DGRAM handelt, verfährt connect() unterschiedlich:
Bei einem Socket vom Typ SOCK_STREAM (Stream-Socket) sendet connect() eine Verbindungsanforderung an einen Partner und versucht so, eine Verbindung zu diesem herzustellen. Der Partner wird durch den Parameter name spezifiziert. Mit connect() initiiert z.B. ein Client-Prozess über einen Stream-Socket eine Verbindung zu einem Server.
Generell können Stream-Sockets nur einmal eine Verbindung mit connect() herstellen.Bei einem Socket vom Typ SOCK_DGRAM (Datagramm-Socket) legt ein Prozess mit connect() den Namen des Kommunikationspartners fest, mit dem der Datenaustausch erfolgen soll. An diesen Kommunikationspartner sendet der Prozess dann die Datagramme. Außerdem ist dieser Kommunikationspartner der einzige Socket, von dem der Prozess Datagramme empfangen kann.
Bei Datagramm-Sockets kann connect() mehrmals verwendet werden, um die Kommunikationspartner zu wechseln. Durch Angabe eines Null-Zeigers beim Parameter name kann die Zuordnung zu einem bestimmten Partner beendet werden.
Returnwert
0:
Bei Erfolg.
-1:
Bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.
Fehler
EADDRINUSE
Die angegebene Adresse wird bereits benutzt.
EADDRNOTAVAIL
Die angegebene Adresse ist keine gültige Adresse.
EAFNOSUPPORT
Adressen in der angegebenen Adressfamilie können mit diesem Socket nicht verwendet werden.
EALREADY
Es handelt sich um einen nicht-blockierenden Socket, und eine vorher gesendete Verbindungsanforderung wurde noch nicht abgeschlossen.
EBADF
s ist kein gültiger Deskriptor.
ECONNREFUSED
Der Verbindungsversuch wurde zurückgewiesen. Das aufrufende Programm muss den Socket-Deskriptor mit close() schließen und mit einem neuen Aufruf von socket() einen neuen Deskriptor anfordern. Danach kann es mit connect() den Verbindungsversuch wiederholen.
EFAULT
Der Parameter name zeigt auf eineungültige Adresse.
EINTR
Der Verbindungsaufbauversuch wurde durch ein Signal unterbrochen.
EINVAL
Der Parameter namelen hat nicht die Größe einer gültigen Adresse für die angegebene Adressfamilie.
EISCONN
Der Socket hat bereits eine Verbindung.
ENETUNREACH
Das Netz ist von diesem Rechner aus nicht erreichbar.
ENETDOWN
Die Verbindung zum Netzwerk ist nicht mehr aktiv.
ENOBUFS
Die Ressourcen reichen für die Ausführung von connect() nicht aus.
ENOTSOCK
Der Deskriptor s referenziert eine Datei, aber keinen Socket.
ETIMEDOUT
Die Verbindung konnte nicht innerhalb einer bestimmten Zeitspanne aufgebaut werden.
Wenn AF_UNIX die Adressfamilie des Sockets ist, kann die Ausführung von connect() auch aus folgenden Gründen zu einem Fehler führen:
EACCES
Für eine Komponente des Pfadnamens wird die Zugriffsberechtigung verweigert, oder die Berechtigung zum Schreiben auf den angegebenen Socket wird verweigert.
EDESTADDRREQ
Der Parameter name ist der Null-Zeiger.
ENAMETOOLONG
Eine Komponente eines Pfadnamens überschreitet NAME_MAX Zeichen, oder der gesamte Pfadname ist länger als PATH_MAX Zeichen.
ENOENT
Eine Komponente des Pfadnamens verweist auf eine nicht vorhandene Datei, oder der Pfadname ist leer.
ENOTDIR
Eine Komponente im Pfadnamen ist kein Verzeichnis.