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 ソケットの実アドレスで上書きされ、 Socket が socks5tcp_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));