Subroutine socks5tcp_connect

Zweck

Stellen Sie eine Verbindung zu einem SOCKSv5 -Server her und fordern Sie eine Verbindung zu einem externen Ziel an.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
int socks5tcp_connect (Socket, Dst, DstLen, Svr, SvrLen)
int Socket;
struct sockaddr *Dst;
size_t DstLen;
struct sockaddr *Svr;
size_t SrvLen;

Beschreibung

Die Subroutine socks5tcp_connect fordert eine Verbindung zu Dst von dem in Svrangegebenen SOCKSv5 -Server an. Bei Erfolg werden Dst und Svr mit den tatsächlichen Adressen der externen Verbindung überschrieben und nachfolgende Schreibvorgänge und Lesevorgänge von Socket werden über Svrweitergeleitet.

Socket muss ein offener Socketdeskriptor des Typs SOCK_STREAM; Dst und Svr können entweder IPv4 -oder IPv6 -Adressen sein.

Die Socketanwendungen können mit COMPAT_43 kompiliert werden. Dadurch wird die sockaddr -Struktur BSD 4.3 kompatibel. Weitere Informationen finden Sie unter socket.h.

Parameter

Element Beschreibung
Socket Gibt den eindeutigen Namen des Sockets an.
DST Gibt die externe Adresse des Zielsockets an, zu dem der SOCKSv5 -Server versucht, eine Verbindung herzustellen.
DstLength Gibt die Länge der Adressstruktur in Dstan.
Service Gibt bei einem Wert ungleich NULL die Adresse des SOCKSv5 -Servers an, der zum Anfordern der weiterübermittelten Verbindung verwendet werden soll.
SvrLength Gibt die Länge der Adressstruktur in Svran.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine socks5tcp_connect den Wert 0 zurück und ändert Dst und Svr , um die tatsächlichen Endpunkte des erstellten externen Sockets widerzuspiegeln.

Wenn die Subroutine socks5tcp_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 generischen Systemfehler angibt, in die globale Variable errno .
  • Verschiebt einen Fehlercode, der den Fehler SOCKSv5 angibt, in die globale Variable socks5_errno .
  • Dst und Svr bleiben unverändert.

Fehlercodes (in errno; übernommen von dem zugrunde liegenden Aufruf von connect ())

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

Fehler Beschreibung
EBADF Der Parameter Socket ist ungültig.
ENOTSOCK (ENOTSOCK) Der Parameter Socket verweist auf eine Datei, nicht auf ein Socket.
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.
EISVerbindung (EISCONN) Der Socket ist bereits verbunden.
ETIMEDOUT Die Herstellung einer Verbindung hat das zulässige Zeitlimit überschritten, bevor eine Verbindung hergestellt wurde.
ECONNABGELEHNT Der Versuch, eine Verbindung herzustellen, wurde zurückgewiesen.
ENETUNREACH Es ist kein Leitweg zum Netz oder Host vorhanden.
EADDRINUSE Die angegebene Adresse wird bereits verwendet.
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 Mindestens eines der angegebenen Argumente ist ungültig.
INAKTIV Das angegebene physische Netz ist inaktiv.
ENOSPC In einer Einheit oder Systemtabelle ist kein Platz mehr vorhanden.
ENOTCONN Es konnte keine Verbindung zum Socket hergestellt werden.

Fehlercodes (in socks5_errno; SOCKSv5-specific Fehler)

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

Fehler Beschreibung
S5_ESRVFAIL Allgemeiner SOCKSv5 -Serverfehler.
S5_EPERM Ablehnung des Serverregelsatzes SOCKSv5 .
S5_ENETUNREACH Der SOCKSv5 -Server konnte das Zielnetz nicht erreichen.
S5_EHOSTUNREACH Der SOCKSv5 -Server konnte den Zielhost nicht erreichen.
S5_ECONNREFUSED SOCKSv5 -Serververbindungsanforderung vom Zielhost zurückgewiesen.
S5_ETIMEDOUT SOCKSv5 -Serververbindungsfehler aufgrund des TTL-Ablaufs.
S5_EOPNOTSUPP Befehl wird vom Server SOCKSv5 nicht unterstützt.
S5_EAFNOSUPPORT Adressfamilie wird vom Server SOCKSv5 nicht unterstützt.
S5_ENOSERV Kein Server gefunden.

Beispiele

Das folgende Programmfragment veranschaulicht die Verwendung der Subroutine socks5tcp_connect durch einen Client, um eine Verbindung vom Socket eines Servers anzufordern.

struct sockaddr_in svr;
struct sockaddr_in6 dst;
.
.
.
socks5tcp_connect(s,(struct sockaddr*)&dst, sizeof(dst), (struct sockaddr *)&svr, sizeof(svr));