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

sctp_opt_info()

int sctp_opt_info(int sock, sctp_assoc_id_t id, int opt, void *arg, socklen_t *len);

sctp_opt_info() 関数は、sock パラメータに記述されるソケットに関連付けられている SCTP レベルのオプションを返します。1 対多スタイルの SCTP ソケットの場合、id パラメータの値は特定の関連付けを指します。1 対 1 スタイルの SCTP ソケットの場合、id パラメータは無視されます。opt パラメータの値は、取得する SCTP ソケットオプションを指定します。arg パラメータの値は、呼び出し元プログラムによって割り当てられるオプション固有の構造体バッファーです。*len パラメータの値は、オプションの長さです。

opt パラメータは、次の値を取ることができます。

SCTP_RTOINFO

調整可能な再伝送タイムアウト(RTO) を初期化および設定するために使用されるプロトコルのパラメータを返します。プロトコルのパラメータは次の構造体を使用します。

struct sctp_rtoinfo {
    sctp_assoc_t    srto_assoc_id;
    uint32_t        srto_initial;
    uint32_t        srto_max; 
    uint32_t        srto_min;
};
srto_assoc_id

対象になる関連付けを指定するこの値は、呼び出し元プログラムが提供します。

srto_initial

この値は初期 RTO 値です。

srto_max

この値は最大 RTO 値です。

srto_min

この値は最小 RTO 値です。

SCTP_ASSOCINFO

関連付け固有のパラメータを返します。パラメータは次の構造体を使用します。

struct sctp_assocparams {
    sctp_assoc_t    sasoc_assoc_id;
    uint16_t        sasoc_asocmaxrxt;
    uint16_t        sasoc_number_peer_destinations;
    uint32_t        sasoc_peer_rwnd;
    uint32_t        sasoc_local_rwnd;
    uint32_t        sasoc_cookie_life;
};
sasoc_assoc_id

対象になる関連付けを指定するこの値は、呼び出し元プログラムが提供します。

sasoc_assocmaxrxt

この値は、関連付けに対する再伝送の最大数を指定します。

sasoc_number_peer_destinations

この値は、ピアが持つアドレスの数を指定します。

sasoc_peer_rwnd

この値は、ピアの受信ウィンドウの現在値を指定します。

sasoc_local_rwnd

この値は、ピアの送信先の、最後に報告された受信ウィンドウを指定します。

sasoc_cookie_life

この値は、関連付けの cookie の存続時間を指定し、cookie を発行する際に使用されます。

時間の値を使用するすべてのパラメータはミリ秒単位です。

SCTP_DEFAULT_SEND_PARAM

sendto(3SOCKET) 関数の呼び出しが関連付けに関して使用するパラメータのデフォルトセットを返します。パラメータは次の構造体を使用します。

struct sctp_sndrcvinfo {
    uint16_t        sinfo_stream;
    uint16_t        sinfo_ssn;
    uint16_t        sinfo_flags;
    uint32_t        sinfo_ppid;
    uint32_t        sinfo_context;
    uint32_t        sinfo_timetolive;
    uint32_t        sinfo_tsn;
    uint32_t        sinfo_cumtsn;
    sctp_assoc_t    sinfo_assoc_id;
};
sinfo_stream

この値は、sendmsg() 呼び出しのデフォルトストリームを指定します。

sinfo_ssn

この値は常に 0 です。

sinfo_flags

この値は、sendmsg() 呼び出しのデフォルトフラグです。フラグは次の値を取ることができます。

  • MSG_UNORDERED

  • MSG_ADDR_OVER

  • MSG_ABORT

  • MSG_EOF

  • MSG_PR_SCTP

sinfo_ppid

この値は、sendmsg() 呼び出しのデフォルトのペイロードプロトコル識別子です。

sinfo_context

この値は、sendmsg() 呼び出しのデフォルトコンテキストです。

sinfo_timetolive

この値は、ミリ秒単位で期間を指定します。この期間を経過すると、伝送が開始されていないメッセージは期限切れになります。値が 0 の場合は、メッセージが期限切れにならないことを示します。MSG_PR_SCTP フラグが設定されている場合、sinfo_timetolive に指定された期間内に伝送が正常に完了しないメッセージは期限切れになります。

sinfo_tsn

この値は常に 0 です。

sinfo_cumtsn

この値は常に 0 です。

sinfo_assoc_id

この値は、呼び出し元アプリケーションによって設定され、対象になる関連付けを指定します。

SCTP_PEER_ADDR_PARAMS

指定されたピアのアドレスのパラメータを返します。パラメータは次の構造体を使用します。

struct sctp_paddrparams {
    sctp_assoc_t               spp_assoc_id;
    struct sockaddr_storage    spp_address;
    uint32_t                   spp_hbinterval;
    uint16_t                   spp_pathmaxrxt;
};
spp_assoc_id

対象になる関連付けを指定するこの値は、呼び出し元プログラムが提供します。

spp_address

この値は、対象になるピアのアドレスを指定します。

spp_hbinterval

この値は、ミリ秒単位でハートビート間隔を指定します。

spp_pathmaxrxt

この値は、あるアドレスを到達不能と見なすまでの、再伝送を試みる最大回数を指定します。

SCTP_STATUS

関連付けに関する現在の状態情報を返します。パラメータは次の構造体を使用します。

struct sctp_status {
    sctp_assoc_t             sstat_assoc_id;
    int32_t                  sstat_state;
    uint32_t                 sstat_rwnd;
    uint16_t                 sstat_unackdata;
    uint16_t                 sstat_penddata;
    uint16_t                 sstat_instrms;
    uint16_t                 sstat_outstrms;
    uint32_t                 sstat_fragmentation_point;
    struct sctp_paddrinfo    sstat_primary;
};
sstat_assoc_id

対象になる関連付けを指定するこの値は、呼び出し元プログラムが提供します。

sstat_state

この値は、関連付けの現在の状態を示し、関連付けは次の状態を取ることができます。

SCTP_IDLE

SCTP 終端がいずれの関連付けとも関連付けられていません。socket() 関数が終端を開いた直後、または、終端が閉じられた直後、終端はこの状態になります。

SCTP_BOUND

bind() の呼び出しのあと、SCTP 終端が 1 つ以上のローカルアドレスにバインドされています。

SCTP_LISTEN

リモート SCTP 終端からの関連付け要求を終端が待機しています。

SCTP_COOKIE_WAIT

SCTP 終端が INIT チャンクを送信し、INIT-ACK チャンクを待機しています。

SCTP_COOKIE_ECHOED

SCTP 終端が、ピアの INIT-ACK チャンクから受信した cookie をピアにエコーバックしました。

SCTP_ESTABLISHED

SCTP 終端はピアとデータを交換できます。

SCTP_SHUTDOWN_PENDING

SCTP 終端が上位層から SHUTDOWN プリミティブを受信しました。この終端は上位層からデータを受け入れません。

SCTP_SHUTDOWN_SEND

SCTP_SHUTDOWN_PENDING 状態にあった SCTP 終端が SHUTDOWN チャンクをピアに送信しました。SHUTDOWN チャンクが送信されるのは、終端からピアへの未処理データがすべて確認されたあとだけです。終端のピアが SHUTDOWN ACK チャンクを送信すると、終端は SHUTDOWN COMPLETE チャンクを送信し、関連付けが閉じられたと見なされます。

SCTP_SHUTDOWN_RECEIVED

SCTP 終端がピアから SHUTDOWN チャンクを受信しました。この終端はそのユーザーから新しいデータを受け入れません。

SCTP_SHUTDOWN_ACK_SEND

SCTP_SHUTDOWN_RECEIVED 状態の SCTP 終端がピアに SHUTDOWN ACK チャンクを送信しました。終端が SHUTDOWN ACK チャンクを送信するのは、その終端からのすべての未処理データをピアが確認したあとだけです。終端のピアが SHUTDOWN COMPLETE チャンクを送信すると、関連付けは閉じられます。

sstat_rwnd

この値は、関連付けピアの現在の受信ウィンドウです。

sstat_unackdata

この値は、未確認 DATA チャンクの数です。

sstat_penddata

この値は、受信を待機している DATA チャンクの数です。

sstat_instrms

この値は、着信ストリームの数です。

sstat_outstrms

この値は、発信ストリームの数です。

sstat_fragmentation_point

メッセージ、SCTP ヘッダー、および IP ヘッダーを含めたサイズが sstat_fragmentation_point の値を超える場合、メッセージは分割されます。この値は、パケットの着信先アドレスのパス最大伝送ユニット (P-MTU) と同じです。

sstat_primary

この値は、プライマリピアのアドレスに関する情報です。この情報は次の構造体を使用します。

struct sctp_paddrinfo {
    sctp_assoc_t               spinfo_assoc_id;
    struct sockaddr_storage    spinfo_address;
    int32_t                    spinfo_state;
    uint32_t                   spinfo_cwnd;
    uint32_t                   spinfo_srtt;
    uint32_t                   spinfo_rto;
    uint32_t                   spinfo_mtu;
};
spinfo_assoc_id

対象になる関連付けを指定するこの値は、呼び出し元プログラムが提供します。

spinfo_address

この値は、プライマリピアのアドレスです。

spinfo_state

この値は、SCTP_ACTIVE または SCTP_INACTIVE の 2 つの値のいずれかを取ります。

spinfo_cwnd

この値は、ピアアドレスの輻輳ウィンドウです。

spinfo_srtt

この値は、ピアアドレスに関する現在の平滑化された RTT の計算値です。ミリ秒単位で示されます。

spinfo_rto

この値は、ピアアドレスに関する現在の伝送タイムアウト値です。ミリ秒単位で示されます。

spinfo_mtu

この値は、ピアアドレスに関する P-MTU です。

sctp_opt_info() 関数は成功すると 0 を返します。失敗すると、sctp_opt_info() 関数は -1 を返し、errno の値を該当するエラーコードに設定します。sctp_opt_info() に渡される sock パラメータのファイル記述子が無効である場合、sctp_opt_info() 関数は失敗して EBADF を返します。sctp_opt_info() 関数に渡される sock パラメータのファイル記述子がソケットではない場合、sctp_opt_info() 関数は失敗して ENOTSOCK を返します。関連付け ID が 1 対多スタイル SCTP ソケットに対して無効である場合、sctp_opt_info() 関数は失敗して errno の値を EINVAL に設定します。指定されたオプションに対して入力バッファー長が短すぎる場合、sctp_opt_info() 関数は失敗して errno の値を EINVAL に設定します。ピアのアドレスのアドレス群が AF_INET または AF_INET6 ではない場合、sctp_opt_info() 関数は失敗して errno の値を EAFNOSUPPORT に設定します。