Subroutine socks5tcp_bind
Zweck
Stellen Sie eine Verbindung zu einem SOCKSv5 -Server her und fordern Sie ein empfangsbereites Socket für eingehende ferne Verbindungen an.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h> int socks5tcp_bind(Socket, Dst, DstLen, Svr, SvrLen)
Int Socket;
struct sockaddr *Dst;
size_t DstLen;
struct sockaddr *Svr;
size_t SrvLen;Beschreibung
Die Subroutine socks5tcp_bind fordert als Vorbereitung für eine eingehende Verbindung von einem fernen Ziel ein empfangsbereites Socket auf dem in Svrangegebenen SOCKSv5 -Server an. angegeben durch Dst. Bei Erfolg wird Svr mit der tatsächlichen Adresse des neu gebundenen empfangsbereiten Sockets überschrieben und Socket kann in einem nachfolgenden Aufruf von socks5tcp_acceptverwendet werden.
Socket muss ein offener Socketdeskriptor des Typs SOCK_STREAM 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 Adresse des SOCKSv5 -Servers an, der zum Anfordern der weitergeleitete Verbindung verwendet werden soll. Bei Erfolg wird dieser Bereich mit der tatsächlichen gebundenen Adresse auf dem Server überschrieben. |
| DstLength | Gibt die Länge der Adressstruktur in Dstan. |
| Service | Bei einem Wert ungleich NULL gibt dieser Wert die Adresse des SOCKSv5 -Servers an, der zum Anfordern der weitergeleitete Verbindung verwendet werden soll. Bei Erfolg wird dieser Bereich mit der tatsächlichen gebundenen Adresse auf dem Server überschrieben. |
| SvrLength | Gibt die Länge der Adressstruktur in Svran. |
Rückgabewerte
Nach erfolgreicher Beendigung gibt die Subroutine socks5tcp_bind den Wert 0 zurück und ändert Svr , um die tatsächliche Adresse des neu gebundenen Listener-Sockets wiederzugeben.
Wenn die Subroutine socks5tcp_bind 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 .
Fehlercodes (in errno; übernommen von dem zugrunde liegenden Aufruf von connect ())
Die Subroutine socks5tcp_bindaccept 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_EADDRINUSE | Die angeforderte Bindungsadresse wird bereits verwendet (auf dem SOCKSv5 -Server). |
| S5_ENOERV | Kein Server gefunden. |
Beispiele
Das folgende Programmfragment veranschaulicht die Verwendung der Subroutine socks5tcp_bind durch einen Client zum Anfordern eines empfangsbereiten Sockets von einem Server.
struct sockaddr_in svr;
struct sockaddr_in dst;
.
.
.
socks5tcp_bind(s, (struct sockaddr *)&dst, sizeof(dst), (structsockaddr *)&svr, sizeof(svr));