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