socks5tcp_accept -Subroutine

Zweck

Wartet auf eine eingehende Verbindung zu einem Socket von einem vorherigen socks5tcp_bind(-Aufruf.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

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

Beschreibung

Die Subroutine socks5tcp_accept wird blockiert, bis eine eingehende Verbindung an einem empfangsbereiten Socket hergestellt wird, der in einem vorherigen Aufruf von socks5tcp_bindangefordert wurde. Bei Erfolg werden nachfolgende Schreibvorgänge und Lesevorgänge aus Socket über SVRweitergeleitet.

Socket muss ein offener Socketdeskriptor des Typs SOCK_STREAM sein.

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 Wenn nicht NULL, Puffer für den Empfang der Adresse des fernen Clients, der eine eingehende Verbindung eingeleitet hat
DstLength Gibt die Länge der Adressstruktur in Dstan.
Service Ist der Wert ungleich NULL, gibt er die Adresse des SOCKSv5 -Servers an, der zum Anfordern der weitergeleitete Verbindung verwendet werden soll. Bei Erfolg wird dieser Bereich mit der serverseitigen Adresse der eingehenden Verbindung überschrieben.
SvrLength Gibt die Länge der Adressstruktur in SVRan.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine socks5tcp_accept den Wert 0 zurück und ändert Dst und SVR , um die tatsächlichen Endpunkte des eingehenden externen Sockets widerzuspiegeln.

Wenn die Subroutine socks5tcp_accept 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 socks5tcp_bindaccept ist nicht erfolgreich, wenn einer der folgenden Fehler auftritt:

Fehler Beschreibung
EBADF Der Parameter Socket ist ungültig.
EAFNOUNTERSTÜTZUNG Die Adressen in der angegebenen Adressfamilie können mit diesem Socket nicht verwendet werden.
ENETUNREACH Es ist kein Leitweg zum Netz oder Host vorhanden.
EFAULT Der Parameter Dst oder SVR befindet sich nicht in einem beschreibbaren Teil des Benutzeradressraums.
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_EADDRINUSE Die angeforderte Bindungsadresse wird bereits verwendet (auf dem SOCKSv5 -Server).
S5_ENOSERV Kein Server gefunden.

Beispiele

Das folgende Programmfragment veranschaulicht die Verwendung der Subroutinen socks5tcp_accept und socks5tcp_bind durch einen Client, um einen empfangsbereiten Socket von einem Server anzufordern und auf eine eingehende Verbindung auf der Serverseite zu warten.

struct sockaddr_in svr;
struct sockaddr_in dst;
.
.
.
socks5tcp_bind(s,(struct sockaddr*)&dst, sizeof(dst), (struct sockaddr *)&svr, sizeof(svr), &res, sizeof(svr));
.
.
.
socks5tcp_accept(s, (struct sockaddr *)&dst, sizeof(dst), (struct sockaddr *)&svr, sizeof(svr));