connect(3N) connect(3N)
NAME
connect - Verbindung über einen Socket aufbauen
SYNTAX
#include <sys/types.h>
#include <sys/socket.h>
int connect(int s, const struct sockaddr *name, int namelen);
BESCHREIBUNG
Der Parameter s bezeichnet einen Socket. Handelt es sich um einen
Socket vom Typ SOCKDGRAM, so gibt die Funktion die Adresse des Kommu-
nikationspartners an, mit der der Socket verbunden werden soll. Dies
ist die Adresse, an die Datagramme gesendet werden, und die einzige
Adresse, von der Datagramme empfangen werden können.
Falls der Socket s vom Typ SOCKSTREAM ist, versucht connect() eine
Verbindung zu einem anderen Kommunikations-Endpunkt, einem durch name
spezifizierten Socket der gleiche Adreßfamilie aufzubauen. name ist
eine Adresse in der Adreßfamilie des Sockets. Jede Adreßfamilie inter-
pretiert den Parameter name in seiner eigenen Art und Weise. Wenn s
(Socket) noch nicht gebunden ist, dann wird er an eine Adresse gebun-
den, die vom Transportanbieter ausgewählt wird. Im allgemeinen kann
über einen Stream-Sockets nur eine Verbindung aufgebaut [connect()]
werden. Datagramm-Sockets können connect() mehrfach verwenden, um ihre
Kommunikationspartner zu wechseln. Durch Angabe einer Null-Adresse
kann eine Verbindung über Sockets des Typs SOCKDGRAM beendet werden.
RÜCKGABEWERT
Falls der Verbindungsaufbau erfolgreich war, wird 0 zurückgeliefert.
Andernfalls wird -1 zurückgegeben, wobei ein genauerer Fehlercode in
errno abgelegt ist.
DIAGNOSE
Der Aufruf schlägt in folgenden Fällen fehl:
EBADF s ist kein gültiger Deskriptor.
ENOTSOCK s verweist nicht auf einen Socket.
EINVAL namelen entspricht nicht der Länge einer gültigen
Adresse der verwendeten Adreßfamilie.
EADDRNOTAVAIL Der angegebene Partner auf dem fernen Rechner erwar-
tet keinen Verbindungsaufbau.
EAFNOSUPPORT Adressen der angegebenen Adreßfamilie können mit
diesem Socket nicht verwendet werden.
EISCONN Der Socket ist bereits verbunden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
connect(3N) connect(3N)
ETIMEDOUT Die Verbindung konnte nicht innerhalb einer bestimm-
ten Zeitspanne aufgebaut werden.
ECONNREFUSED Der Verbindungswunsch wurde zurückgewiesen. Das auf-
rufende Programm sollte den Socket-Deskriptor mit-
tels close(2) schließen und einen weiteren
socket(3N)-Aufruf durchführen, um einen neuen
Deskriptor zu erhalten, bevor es einen weiteren
connect()-Aufruf versucht.
ENETUNREACH Das Netz ist von diesem Rechner aus nicht erreich-
bar.
EADDRINUSE Die Adresse wird bereits verwendet.
EINPROGRESS Der Socket ist nicht blockierend und die Verbindung
kann nicht sofort vollständig eingerichtet werden.
Es ist möglich, zu erfahren, wann die Verbindung
hergestellt ist, indem man mit select(3C) das Ein-
treffen eines Schreibereignisses für diesen Socket
abfragt. Dies ist jedoch nur möglich, wenn das
Socket-STREAMS-Modul das oberste Modul auf dem Pro-
tokollstack ist, was in der Regel gewährleistet ist.
EALREADY Der Socket ist nicht blockierend und vorhergehende
Verbindungsversuche sind noch nicht vollständig
bearbeitet.
EINTR Der Verbindungsaufbauversuch wurde durch ein Signal
unterbrochen.
EPROTOTYPE Das Protokoll hat für den Socket name den falschen
Typ.
ENOSR Es waren nicht genügend STREAMS-Betriebsmittel ver-
fügbar, um die Operation auszuführen.
Die folgenden Fehler sind spezifisch für Adressen in der UNIX Adreßfa-
milie. Diese Fehler sind für zukünftige Versionen der UNIX IPC-
Adreßfamilie eventuell nicht mehr gültig.
ENOTDIR Eine Pfad-Komponente des Pfadnamens in name ist kein
Verzeichnis.
ENOENT Eine Pfad-Komponente des Pfadnamens in name exi-
stiert nicht.
ENOENT Der Socket, auf den durch den Pfadnamen in name ver-
wiesen wird, existiert nicht.
EACCES Die Sucherlaubnis für eine Pfad-Komponente des Pfad-
namens in name ist nicht gegeben.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
connect(3N) connect(3N)
ELOOP Es wurden zu viele symbolische Verweise bei der
Umsetzung des Pfadnamens in name entdeckt.
EIO Es ist ein E/A-Fehler beim Lesen von oder Schreiben
auf das Dateisystem aufgetreten.
SIEHE AUCH
select(3C), accept(3N), getsockname(3N), socket(3N).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98