socks5udp_associate -Subroutine

Zweck

Stellt eine Verbindung zu einem SOCKSv5 -Server her und fordert eine UDP-Zuordnung für nachfolgende UDP-Socketkommunikation an.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

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

Beschreibung

Die Subroutine socks5udp_associate fordert eine UDP-Zuordnung für Dst auf dem in SVRangegebenen SOCKSv5 -Server an. Bei Erfolg wird Dst mit einer Rendezvous-Adresse überschrieben, an die nachfolgende UDP-Pakete für das Relay von SVRgesendet werden sollen.

 Socket muss ein offener Socketdeskriptor des Typs SOCK_STREAM; Dst sein und SVR kann entweder IPv4 -oder IPv6 -Adressen sein.

Beachten Sie, dass Socket nicht zum Senden nachfolgender UDP-Pakete verwendet werden kann (ein zweites Socket des Typs SOCK_DGRAM muss erstellt werden).

Die Socketanwendungen können mit COMPAT_43 -Definition 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, an den der SOCKSv5 -Client das Senden von UDP-Paketen erwartet.
DstLength Gibt die Länge der Adressstruktur in Dstan.
Service Gibt die Adresse des SOCKSv5 -Servers an, der zum Anfordern der Zuordnung verwendet wird.
SvrLength Gibt die Länge der Adressstruktur in SVRan.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine socks5udp_associate den Wert 0 zurück und überschreibt Dst mit der Rendezvous-Adresse.

Wenn die Subroutine socks5udp_associate 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 Fehlernummer .
  • Verschiebt einen Fehlercode, der den spezifischen SOCKSv5 -Fehler angibt, in die globale Variable socks5_errno .

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

Die Subroutine socks5udp_associate 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 einen Socket.
EADDRNOTAVAIL Die angegebene Adresse ist auf der lokalen Maschine nicht verfügbar.
EAFNOUNTERSTÜTZUNG 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.
EINFORTSCHRITT 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 -Serverausfall.
S5_EPERM Ablehnung des SOCKSv5 -Serverregelsatzes.
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 SOCKSv5 -Server nicht unterstützt.
S5_EAFNOSUPPORT Adressfamilie wird vom SOCKSv5 -Server nicht unterstützt
S5_ENOSERV Kein Server gefunden.

Beispiele

Das folgende Programmfragment veranschaulicht die Verwendung der Subroutine socks5udp_associate durch einen Client, um eine Zuordnung auf dem Server anzufordern.

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