bind2addrsel() - ソース・アドレス選択によるバインド

標準

標準/拡張機能 C/C++ 依存項目
RFC 5014 両方  

形式

#define _OPEN_SYS_SOCK_IPV6
#include <netinet/in.h>

int bind2addrsel(int sd, const struct sockaddr *dstaddr, socklen_t dstaddrlen);      

機能説明

bind2addrsel() 関数は、所定の宛先アドレスとの通信に適切なソース・アドレスとポートに、ソケットをバインドします。このソース・アドレスは、デフォルトの優先フラグか、このソケット上の setsockopt() IPV6_ADDR_PREFERENCES 呼び出しを使用してアプリケーションが以前に表明したフラグのどちらかにしたがって、TCP スタックによって選択されます。バインドが成功すると、アプリケーションは、getsockname() を呼び出して、選択されたアドレスとポートを判別することができます。その後、アプリケーションは、inet6_is_srcaddr() を呼び出して、バインドされたローカル・アドレスがその設定に適合するかどうかを判別することができます。ソース・アドレスの選択について詳しくは、「z/OS V2R2.0 Communications Server: IPv6 ネットワークとアプリケーション開発ガイド」を参照してください。

引数
説明
sd
スタックによって選択されたソース・アドレスとポートにバインドされるソケット。
dstaddr
次のように初期化された sockaddr_in6 構造体を指す NULL 以外のポインター。
  • sizeof(struct sockaddr_in6) の構造体全体をクリアします。
  • sin6_ ファミリー は、AF_INET6 にセットされる必要があります。
  • sin6_len を AF_INET6 の正しい長さに設定します。
  • sin6_addr を、ローカル・ノードが通信する先の 128 ビット IPv6 宛先アドレスに設定します。
  • アドレスが link-local である場合、sin6_scope_id が設定されなければなりません。
dstaddrlen
引数として渡された sockaddr 構造体のサイズ。

戻り値

正常に実行された場合、bind2addrsel() は 0 を戻します。

正常に実行されなかった場合、bind2addrsel() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EADDRNOTAVAIL
宛先アドレスはマルチキャスト・アドレスですが、ソケットのタイプが SOCK_STREAM であるか、バインド要求に応えるのに使用可能な一時ポートがありません。
EAFNOSUPPORT
アドレス構造体で指定されたアドレス・ファミリーがサポートされていません。
EBADF
ソケット記述子が正しくありません。
EHOSTUNREACH
経路がないため、宛先アドレスに到達不能です。
EINVAL
入力パラメーターの 1 つが無効でした。
EIO
ネットワークまたはトランスポートで障害が発生しました。
ENOBUFS
バッファーを取得できませんでした。
ENOTSOCK
sd パラメーターが有効なソケット記述子を参照しません。
EOPNOTSUPP
ソケット・ドメインのタイプがサポートされていません。
EPROTOTYPE
ソケット・プロトコルが TCP または UDP ではありません。

関連情報