socks5udp_associate サブルーチン
目的
SOCKSv5 サーバーに接続し、後続の UDP ソケット通信のための UDP 関連を要求します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
#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;説明
socks5udp_associate サブルーチンは、 スヴルで指定された SOCKSv5 サーバー上の ドスト の UDP 関連付けを要求します。 成功すると、 ドスト はランデブー・アドレスで上書きされます。このアドレスに、後続の UDP パケットが スヴルによってリレー用に送信されます。
ソケット は、タイプ SOCK_STREAM のオープン・ソケット記述子でなければなりません。 ドスト および スヴル は、 IPv4 または IPv6 のいずれかのアドレスにすることができます。
ソケット を使用して後続の UDP パケットを送信することはできないことに注意してください (タイプ SOCK_DGRAM の 2 番目のソケットを作成する必要があります)。
ソケット・アプリケーションは、 COMPAT_43 を定義してコンパイルすることができます。 これにより、 sockaddr 構造体は BSD 4.3 と互換性を持ちます。 詳しくは、 socket.hを参照してください。
パラメーター
| 項目 | 説明 |
|---|---|
| ソケット | ソケットの固有の名前を指定します。 |
| DST | SOCKSv5 クライアントが UDP パケットの送信先として予期するターゲット・ソケットの外部アドレスを指定します。 |
| DstLength | ドスト内のアドレス構造体の長さを指定します。 |
| SVR | 関連付けを要求するために使用する SOCKSv5 サーバーのアドレスを指定します。 |
| SvrLength | スヴル内のアドレス構造体の長さを指定します。 |
戻り値
正常終了すると、 socks5udp_associate サブルーチンは値 0 を戻し、ランデブー・アドレスで ドスト を上書きします。
socks5udp_associate サブルーチンが失敗すると、システム・ハンドラーは以下の機能を実行します。
- 呼び出し元のプログラムに-1を返す。
- 一般システム・エラーを示すエラー・コードを エラー番号 グローバル変数に移動します。
- 特定の SOCKSv5 エラーを示すエラー・コードを socks5_errno グローバル変数に移動します。
エラー・コード (errno に入れられます。connect () への基礎となる呼び出しから継承されます)
以下のいずれかのエラーが発生すると、 socks5udp_associate サブルーチンは失敗します。
| エラー | 説明 |
|---|---|
| EBADF | ソケット パラメーターが有効ではありません。 |
| ENOTSOCK | ソケット パラメーターは、ソケットではなくファイルを参照します。 |
| EADDRNOTAVAIL | 指定のアドレスは、ローカル・マシンからは 利用できません。 |
| EAFNOSUPPORT | 指定されたアドレス・ファミリーのアドレスは、このソケットでは使用できません。 |
| EISCONN | ソケットは既に接続されています。 |
| ETIMEDOUT | 接続が確立される前に、接続の確立がタイムアウトになりました。 |
| ECONNREFUSED | 接続する試みはリジェクトされました。 |
| ENETUNREACH | ネットワークまたはホストへの経路が存在しません。 |
| EADDRINUSE | 指定されたアドレスは、既に使用されています。 |
| EFAULT | 住所 パラメーターは、ユーザー・アドレス・スペースの書き込み可能部分にはありません。 |
| 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_ENOSERV | サーバーが見つかりません。 |
例
以下のプログラム・フラグメントは、サーバー上の関連付けを要求するための、クライアントによる socks5udp_associate サブルーチンの使用法を示しています。
struct sockaddr_in svr;
struct sockaddr_in6 dst;
.
.
.
socks5udp_associate(s,(struct sockaddr*)&dst, sizeof(dst), (struct sockaddr *)&svr, sizeof(svr));