Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

connect() - Verbindung über einen Socket initiieren

&pagelevel(4)&pagelevel

#include <sys/socket.h>

int connect(int s, const struct sockaddr *name, size_t namelen);

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.

Siehe auch

accept(), getsockname(), socket(), close(), select()