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