プログラミングインタフェース

sctp_bindx()

int sctp_bindx(int sock, void *addrs, int addrcnt, int flags);

sctp_bindx() 関数は、SCTP ソケット上のアドレスを管理します。sock パラメータが IPv4 ソケットである場合、sctp_bindx() 関数に渡されるアドレスは IPv4 アドレスである必要があります。sock パラメータが IPv6 ソケットである場合、sctp_bindx() 関数に渡されるアドレスは IPv4 アドレスまたは IPv6 アドレスのどちらかになります。sctp_bindx() 関数に渡されるアドレスが INADDR_ANY または IN6ADDR_ANY であると、ソケットは使用可能なすべてのアドレスにバインドします。bind(3SOCKET) を使用して SCTP 終端をバインドします。

*addrs パラメータの値は、1 つ以上のソケットアドレスの配列へのポインタです。各アドレスは、それぞれ該当する構造体に含まれます。アドレスが IPv4 アドレスである場合、sockaddr_in 構造体または sockaddr_in6 構造体に含まれます。IPv6 アドレスである場合、sockaddr_in6 構造体に含まれます。アドレスタイプ群によって、アドレス長が異なります。呼び出し元は、配列内のアドレスの数を addrcnt パラメータによって指定します。

sctp_bindx() 関数は成功すると 0 を返します。失敗すると、sctp_bindx() 関数は -1 を返し、errno の値を該当するエラーコードに設定します。

各ソケットアドレスに同じポートが指定されていない場合、sctp_bindx() 関数は失敗し、errno の値を EINVAL に設定します。

flags パラメータは、現在定義されている次のフラグの 0 以上に対してビット単位の論理和演算を実行することによって求められます。

SCTP_BINDX_ADD_ADDR は、指定されたアドレスを関連付けに追加するように SCTP に指示します。SCTP_BINDX_REM_ADDR は、指定されたアドレスを関連付けから削除するように SCTP に指示します。この 2 つのフラグは相互に排他です。両方が指定された場合、sctp_bindx() は失敗して errno の値を EINVAL に設定します。

呼び出し元は、関連付けからすべてのアドレスを削除することはできません。このような試みは拒否され、sctp_bindx() 関数は失敗して errno の値が EINVAL に設定されます。アプリケーションは、bind() 関数を呼び出したあとに sctp_bindx(SCTP_BINDX_ADD_ADDR) を使用することにより、追加のアドレスを終端に関連付けることができます。またアプリケーションは、sctp_bindx(SCTP_BINDX_REM_ADDR) を使用することにより、待機しているソケットに関連付けられているアドレスを削除できます。アドレスを削除するために sctp_bindx(SCTP_BINDX_REM_ADDR) を使用したあとは、新しい関連付けを受け入れても、削除されたアドレスは再び関連付けられません。終端が動的アドレスをサポートする場合、SCTP_BINDX_REM_ADDR または SCTP_BINDX_ADD_ADDR を使用すると、ピアにメッセージが送信されてピアのアドレスリストが変更されます。接続されている関連付けにおけるアドレスの追加および削除は、オプションの機能です。この機能をサポートしない実装では、EOPNOTSUPP が返されます。

アドレス群が AF_INET または AF_INET6 ではない場合、sctp_bindx() 関数は失敗して EAFNOSUPPORT を返します。sctp_bindx() に渡される sock パラメータのファイル記述子が無効である場合、sctp_bindx() 関数は失敗して EBADF を返します。