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