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