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));