Subroutine verbinden

Zweck

Verbindet zwei Sockets.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/socket.h>

int connect ( Socket, Name, NameLength )  
int Socket; 
const struct sockaddr *Name;
socklen_t NameLength;

Beschreibung

Die Subroutine connect fordert eine Verbindung zwischen zwei Sockets an. Der Kernel richtet die Kommunikationsverbindung zwischen den Sockets ein. Beide Sockets müssen dasselbe Adressformat und dasselbe Protokoll verwenden.

Wenn ein connect -Unterprogramm auf einem ungebundenen Socket oder einem teilweise gebundenen Socket ausgegeben wird, bindet das System den Socket automatisch. Ein teilweise gebundener Socket ist ein Socket, dem eine Portnummer, aber keine IP-Adresse zugewiesen ist. Das Unterprogramm connect kann verwendet werden, um eine Steckdose mit sich selbst zu verbinden. Eine Socket kann mit sich selbst verbunden werden, indem eine Socket an einen lokalen Port gebunden wird (mithilfe des bind -Unterprogramms) und dann mit demselben Port mit einer lokalen IP-Adresse verbunden wird (mithilfe des connect -Unterprogramms).

Die Subroutine connect führt für jede der folgenden zwei Arten von Initiierungssockets eine andere Aktion aus:

  • Wenn der initiierende Socket SOCK_DGRAM ist, legt das Unterprogramm connect die Peer-Adresse fest. Die Peer-Adresse identifiziert den Socket, an den alle Datagramme in nachfolgenden send unterprogrammen Von diesem connect -Unterprogramm werden keine Verbindungen hergestellt. Wenn der UDP-Socket Datagramme empfängt, während das Unterprogramm connect aufgerufen wird, ändert das Unterprogramm die IP-Adresse und verhindert so, dass der Socket Datagramm-Pakete basierend auf der vorherigen Adresse empfängt.
  • Wenn der initiierende Socket SOCK_STREAM oder SOCK_CONN_DGRAM ist, versucht die connect -Subroutine, eine Verbindung zu dem durch den Name-Parameter angegebenen Socket herzustellen. Jeder Kommunikationsraum interpretiert den Parameter "Name" anders. Bei SOCK_CONN_DGRAM-Socket-Typ und ATM-Protokoll kann die Gegenstelle einige der ATM-Parameter ändern. Wenn die Gegenstelle die ATM-Parameter ändert, können Anwendungen neue Werte der ATM-Parameter abfragen, indem sie die entsprechenden Socket-Optionen verwenden.
  • Bei einem UNIX-Domain-Socket ist ein Aufruf von connect nur dann erfolgreich, wenn der Prozess, der das connect -Unterprogramm aufruft, über Lese- und Schreibberechtigungen für die Socket-Datei verfügt, die durch den Aufruf von bind erstellt wird. Berechtigungen werden durch den Wert von umask bestimmt, der dem Wert des Prozesses entspricht, mit dem die Datei erstellt wurde.

Parameter

Element Beschreibung
Socket Gibt den eindeutigen Namen des Sockets an.
Name Gibt die Adresse des Zielsockets an, der das andere Ende der Kommunikationsleitung bildet
NameLength Gibt die Länge der Adressstruktur an.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine connect den Wert 0 zurück.

Wenn das Unterprogramm connect nicht erfolgreich ist, führt der Systemhandler die folgenden Funktionen aus:

  • Gibt einen Wert von -1 an das aufrufende Programm zurück.
  • Verschiebt einen Fehlercode, der den spezifischen Fehler angibt, in die globale Variable errno.

Fehlercodes

Die Subroutine connect ist nicht erfolgreich, wenn einer der folgenden Fehler auftritt:

Wert Beschreibung
EADDRINUSE Die angegebene Adresse wird bereits verwendet. Dieser Fehler tritt auch auf, wenn die Socket-Option SO_REUSEADDR festgelegt wurde und die lokale Adresse (ob angegeben oder vom System ausgewählt) bereits verwendet wird.
EADDRNOTAVAIL Die angegebene Adresse ist auf der lokalen Maschine nicht verfügbar.
EAFNOSUPPORT Die Adressen in der angegebenen Adressfamilie können mit diesem Socket nicht verwendet werden.
BEREITS Die Socket-Verbindung ist mit dem Flag O_NONBLOCK oder O_NDLAY gekennzeichnet und ein vorheriger Verbindungsversuch ist noch nicht abgeschlossen.
EINTR Der Versuch, eine Verbindung herzustellen, wurde durch die Übermittlung eines Signals unterbrochen, das abgefangen wurde. Die Verbindung wird asynchron hergestellt.
EACCES Die Suchberechtigung für eine Komponente des Pfadpräfix wird verweigert oder der Schreibzugriff auf das benannte Socket wird verweigert.
ENOBUFS Das System hat keinen Speicher mehr für eine interne Datenstruktur.
EOPNOTSUPP Der Socket, auf den sich der Socket-Parameter bezieht, unterstützt connect nicht.
WIR WÜRDEN BLOCKIEREN Der Bereich, der für TCP/UDP-Ephemeral-Ports zugewiesen ist, ist erschöpft.
EBADF Der Parameter Socket ist ungültig.
ECONNABGELEHNT Der Versuch, eine Verbindung herzustellen, wurde zurückgewiesen.
EFAULT Der Parameter Adresse befindet sich nicht in einem beschreibbaren Teil des Benutzeradressraums.
EINPROGRESS Der Socket ist als nicht blockierend markiert. Die Verbindung kann nicht sofort hergestellt werden. Das Anwendungsprogramm kann das Socket zum Schreiben während des Verbindungsprozesses auswählen.
EINVAL Dieser Fehler tritt in den folgenden Fällen auf:
  • Der angegebene Pfadname enthält ein Zeichen mit dem höchstwertigen Bit.
  • Wenn der vorherige Aufruf des Unterprogramms connect fehlschlägt. Schließen Sie in diesem Fall die fehlerhafte Steckdose und öffnen Sie sie erneut. Versuchen Sie dann erneut, das Unterprogramm connect aufzurufen.
EISVerbindung (EISCONN) Der Socket ist bereits verbunden.
INAKTIV Das angegebene physische Netz ist inaktiv.
ENETUNREACH Es ist kein Leitweg zum Netz oder Host vorhanden.
ENOSPC Auf einem Gerät oder Systemtisch ist kein Platz mehr.
ENOTCONN Die Steckdose ist möglicherweise nicht angeschlossen.
ENOTSOCK (ENOTSOCK) Der Parameter Socket verweist auf eine Datei, nicht auf ein Socket.
ETIMEDOUT Die Herstellung einer Verbindung hat das zulässige Zeitlimit überschritten, bevor eine Verbindung hergestellt wurde.
EPROTOTYP Die angegebene Adresse hat einen anderen Typ als das Socket, das an die angegebene Peeradresse gebunden ist.
ELOOP Beim Konvertieren des Pfadnamens in der Adresse wurden zu viele symbolische Verknüpfungen gefunden.
ENOENT Eine Komponente des Pfadnamens gibt keine vorhandene Datei an oder der Pfadname ist eine leere Zeichenfolge.
ENOTDIR Ein Bestandteil des Pfadpräfixes des Pfadnamens in der Adresse ist kein Verzeichnis.

Beispiele

Das folgende Programmfragment veranschaulicht die Verwendung der Subroutine connect durch einen Client, um eine Verbindung zum Socket eines Servers herzustellen.

struct sockaddr_un server;
.
.
.
connect(s,(struct sockaddr*)&server, sun_len(&server));