標準
標準/拡張機能 |
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 ではありません。