socks5tcp_bind サブルーチン

目的

SOCKSv5 サーバーに接続し、着信リモート接続用の listen ソケットを要求します。

ライブラリー

標準 C ライブラリー (libc.a)

構文

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

説明

socks5tcp_bind サブルーチンは、リモート宛先からの着信接続に備えて、 Svrで指定された SOCKSv5 サーバー上の listen ソケットを要求します。 Stで指定します。 成功すると、 Svr は新しくバインドされた listen ソケットの実アドレスで上書きされ、 Socketsocks5tcp_acceptへの後続の呼び出しで使用されます。

Socket は、タイプ SOCK_STREAM のオープン・ソケット記述子でなければなりません。

ソケット・アプリケーションは、 COMPAT_43 を定義してコンパイルすることができます。 これにより、 sockaddr 構造体は BSD 4.3 と互換性を持ちます。 詳しくは、 socket.hを参照してください。

パラメーター

項目 説明
ソケット ソケットの固有の名前を指定します。
DST 中継された接続を要求するために使用する SOCKSv5 サーバーのアドレスを指定します。成功すると、このスペースはサーバー上の実際のバインド済みアドレスで上書きされます。
DstLength Dst内のアドレス構造体の長さを指定します。
SVR NULL 以外の場合、中継された接続を要求するために使用する SOCKSv5 サーバーのアドレスを指定します。成功すると、このスペースはサーバー上の実際のバインド・アドレスで上書きされます。
SvrLength Svrでアドレス構造の長さを指定します。

戻り値

正常終了すると、 socks5tcp_bind サブルーチンは値 0 を戻し、新たにバインドされたリスナー・ソケットの実アドレスを反映するように Svr を変更します。

socks5tcp_bind サブルーチンが失敗すると、システム・ハンドラーは以下の機能を実行します。

  • 呼び出し元のプログラムに-1を返す。
  • 一般システム・エラーを示すエラー・コードを errno グローバル変数に移動します。
  • 特定の SOCKSv5 エラーを示すエラー・コードを socks5_errno グローバル変数に移動します。

エラー・コード (errno に入れられます。connect () への基礎となる呼び出しから継承されます)

以下のいずれかのエラーが発生すると、 socks5tcp_bindaccept サブルーチンは失敗します。

エラー 説明
EBADF Socket パラメーターが有効ではありません。
ENOTSOCK Socket パラメーターは、ソケットではなくファイルを参照します。
EADDRNOTAVAIL 指定のアドレスは、ローカル・マシンからは 利用できません。
EAFNOSUPPORT 指定されたアドレス・ファミリーのアドレスは、このソケットでは使用できません。
EISCONN ソケットは既に接続されています。
ETIMEDOUT 接続が確立される前に、接続の確立がタイムアウトになりました。
ECONNREFUSED 接続する試みはリジェクトされました。
ENETUNREACH ネットワークまたはホストへの経路が存在しません。
EADDRINUSE 指定されたアドレスは、既に使用されています。
EFAULT Address パラメーターは、ユーザー・アドレス・スペースの書き込み可能部分にはありません。
EINPROGRESS ソケットは非ブロッキングとしてマークされます。 接続を即時に完了できません。 アプリケーション・プログラムは、接続処理中に書き込むソケットを選択することができます。
EINVAL 指定された引数の 1 つ以上が無効です。
ENETDOWN 指定された物理ネットワークがダウンしています。
ENOSPC 装置またはシステム・テーブルにスペースが残っていません。
ENOTCONN ソケットを接続できませんでした。

エラー・コード ( socks5_errno; SOCKSv5-specific エラーに入れられます)

以下のいずれかのエラーが発生すると、 socks5tcp_connect サブルーチンは失敗します。

エラー 説明
S5_ESRVFAIL 一般的な SOCKSv5 サーバー障害。
S5_EPERM SOCKSv5 サーバー・ルール・セットの拒否。
S5_ENETUNREACH SOCKSv5 サーバーがターゲット・ネットワークに到達できませんでした。
S5_EHOSTUNREACH SOCKSv5 サーバーがターゲット・ホストに到達できませんでした。
S5_ECONNREFUSED SOCKSv5 サーバー接続要求がターゲット・ホストによって拒否されました。
S5_ETIMEDOUT TTL の有効期限が切れたため、 SOCKSv5 サーバー接続が失敗しました。
S5_EOPNOTSUPP コマンドは SOCKSv5 サーバーによってサポートされていません。
S5_EAFNOSUPPORT アドレス・ファミリーが SOCKSv5 サーバーによってサポートされていません。
S5_EADDRINUSE 要求されたバインド・アドレスは既に使用されています ( SOCKSv5 サーバー)。
S5_ENOERV サーバーが見つかりません。

以下のプログラム・フラグメントは、サーバーから listen ソケットを要求するための、クライアントによる socks5tcp_bind サブルーチンの使用法を示しています。

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