日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
SCTP_SEND(3) FreeBSD ライブラリ関数マニュアル SCTP_SEND(3) 名称 sctp_send, sctp_sendx -- SCTP ソケットにメッセージを送信する ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <sys/types.h> #include <sys/socket.h> #include <netinet/sctp.h> ssize_t sctp_send(int sd, const void *msg, size_t len, const struct sctp_sndrcvinfo *sinfo, int flags); ssize_t sctp_sendx(int sd, const void *msg, size_t len, struct sockaddr *addrs, int addrcnt, const struct sctp_sndrcvinfo *sinfo, int flags); 解説 sctp_send() システムコールは、別の SCTP 終点 (endpoint) に転送するために に使用されます。sctp_send() は、1 対多の (SOCK_SEQPACKET) と 1 対 1 の (SOCK_STREAM) のソケットのタイプの両方のための既存のアソシエーションに データを送信するために使用されます。メッセージ msg の長さは len によって 与えられています。メッセージが基本的なプロトコルを通して不可分に渡すため には長すぎるなら、errno は、EMSGSIZE に設定されて、-1 が返され、メッセー ジは、送信されません。 配信のための失敗の兆候なしに、sctp_send() で暗黙ではありません。局所的に 検出されたエラーは、-1 の返り値によって示されます。 転送されるメッセージを保持するための空間がソケットで利用可能でないなら、 sctp_send() は、ソケットが非ブロッキング I/O モードに置かれていないなら、 通常、ブロックします。select(2) システムコールは、より多くのデータを 1 対 1 のタイプ (SOCK_STREAM) のソケットに送信することが、いつ可能となるかを決 定するために使用されます。 sinfo 構造は、様々な SCTP の機能を制御するために使用され、次の形式があり ます: struct sctp_sndrcvinfo { uint16_t sinfo_stream; /* ストリーム発信 */ uint16_t sinfo_ssn; /* 受信のみ有効 */ uint16_t sinfo_flags; /* 送信を制御するフラグ */ uint32_t sinfo_ppid; /* ppid フィールド */ uint32_t sinfo_context; /* コンテキストフィールド */ uint32_t sinfo_timetolive; /* PR-SCTP に対する有効期間 */ uint32_t sinfo_tsn; /* 受信のみ有効 */ uint32_t sinfo_cumtsn; /* 受信のみ有効 */ sctp_assoc_t sinfo_assoc_id; /* アソシエーション ID */ }; sinfo->sinfo_ppid 引数は、スタックからピア (相手側) 終点に透過的に渡され る 32 ビットの不透明な (サイズおよび形がわからない) 値です。それはメッ セージの受信で利用可能となります (sctp_recvmsg(3) 参照)。スタックは、バイ ト順に関係なしでこの値を渡すことに注意してください。 sinfo->sinfo_flags 引数は、次の 1 つ以上を含みます: #define SCTP_EOF 0x0100 /* シャットダウン手順を始める */ #define SCTP_ABORT 0x0200 /* ABORT をピアに送信する */ #define SCTP_UNORDERED 0x0400 /* メッセージは不規則です */ #define SCTP_ADDR_OVER 0x0800 /* 主要なアドレスを上書きする */ #define SCTP_SENDALL 0x1000 /* これを終点に対してすべての */ /* アソシエーションに送信する */ /* 下位バイトは PR-SCTP ポリシの列挙です */ #define SCTP_PR_SCTP_TTL 0x0001 /* PR-SCTP ベースの時間 */ #define SCTP_PR_SCTP_BUF 0x0002 /* PR-SCTP ベースのバッファ */ #define SCTP_PR_SCTP_RTX 0x0003 /* PR-SCTP ベースの再転送の数 */ フラグ SCTP_EOF は、このメッセージをキューに入れ、次に、アソシエーション の素直なシャットダウンを始めるように SCTP スタックに命令するために使用さ れます。キュー中のすべての残っているデータは、アソシエーションがシャット ダウンされた後に送信されます。 SCTP_ABORT は、直ちにアソシエーションを終了するために使用されます。アボー トが、ピアに送信され、ローカル TCB は、破壊されます。 SCTP_UNORDERED は、送信されるメッセージには、特有の順序がなく、できるだけ 早く、ピアアプリケーションに配信されるべきであることを指定するために使用 されます。このフラグが欠けているとき、メッセージは、ピアストリームの順序 に関係なく、それらが送信されるストリームの中で順番に配信されます。 フラグ SCTP_ADDR_OVER は、特定のアドレスが使用されるべきであることを指定 するために使用されます。通常、SCTP は、送信される主要なアドレスとして、マ ルチホームのピアアドレスの 1 つのみを使用します。デフォルトで、この主要な アドレスは、たとえ to 引数であろうとも、データを送信するために使用されま す。このフラグを指定することによって、ユーザは、主要なアドレスを無視する ように、スタックに問い合わせ、また、送信するための実際のアドレスとしてで はなく、アソシエーションを見つける検索メカニズムとしてのみでない指定され たアドレスを代わりに使用します。 1 対多のタイプ (SOCK_SEQPACKET) のソケットのために、1 つの送信の呼び出し 行い、ソケットがメッセージのコピーを取得する最中にすべてのアソシエーショ ンを持つ、便利な方法として、フラグ SCTP_SENDALL を使用することができま す。このメカニズムは、かなり効率的であり、送信のためのすべてのアソシエー ションによって共有されるデータの 1 つの実際のコピーだけを作ることに注意し てください。 残りのフラグは、部分的な信頼性の拡張 (RFC3758) のために使用され、ピア終点 がこの拡張をサポートする場合にだけ、効果的になります。このオプションは、 ローカルな終点がデータをスキップする際にどのようなローカルなポリシを使用 するべきであるかを指定します。これらのオプションがなにも設定されていない なら、データは決してスキップされません。 SCTP_PR_SCTP_TTL は、存続期間をベースとする時間がデータに適用されているこ とを示すために使用されます。つぎに sinfo->sinfo_timetolive 引数は、データ が転送されることを試みられる多くのミリ秒です。多くのミリ秒が経過して、ピ アがデータを承認していないなら、データは、スキップされ、もはや送信されま せん。このポリシは、データがかつて送信されることさえ保証しないことに注意 してください。多量のデータがキューに入れられて混雑する場合に、最初の転送 が行われる前に sinfo->sinfo_timetolive は、期限が切れるかもしれません。 SCTP_PR_SCTP_BUF ベースのポリシは、sinfo->sinfo_timetolive フィールドを外 向きの送信キューで許された合計のバイト数に変換します。その数か、またはよ り多くのバイトがキューに入れられているなら、他のバッファベースの送信が、 削除するために検索され、スキップされます。また、このポリシは、バッファ ベースの送信がキューになく、timetolive バイトによって指定された最大が キューに入れられているなら、データが決して送信されないことに注意してくだ さい。 SCTP_PR_SCTP_RTX ポリシは、sinfo->sinfo_timetolive を許可する再転送のの数 に変換します。このポリシは、常に最小で 1 つの送信がデータで試みられること を保証します。その後、わずか sinfo->sinfo_timetolive の再転送が、データを スキップする前に行われます。 sinfo->sinfo_stream は、利用者がメッセージを送信したい SCTP ストリームで す。SCTP のストリームは、規則付けられたメッセージの信頼できる (または、部 分的に信頼できる) フロー (流れ) です。 sinfo->sinfo_assoc_id フィールド野は、1 対多のソケットで送信するためのア ソシエーションを選択するために使用されます。1 対 1 のソケットに関して、こ のフィールドは、無視されます。 sinfo->sinfo_context フィールドは、メッセージを送信することができないイベ ントにだけ使用されます。これは、その通知が有効であるなら、(sctp(4) 参照) 失敗した送信が与えられるとき、スタックが保有し、ユーザに与える不透明な (サイズおよび形がわからない) 値です。通常、ユーザプロセスは、送信を実行す ることができないとき、いくつかのアプリケーション特有のデータ構造にイン デックスを付けるこの値を使用することができます。 flags 引数は、sendmsg(2) で見つけられたものとして同じ意味と値を保持します が、一般的に、SCTP によって無視されます。 フィールド sinfo->sinfo_ssn, sinfo->sinfo_tsn と sinfo->sinfo_cumtsn は、 メッセージを受信するときだけ使用され、したがって sctp_send() によって無視 されます。関数 sctp_sendx() には、渡された sockaddr 構造体の配列の追加引 数で sctp_send() としていくつかのプロパティ (特性) があります。送信される アドレスの配列として与えられている addrs 引数とともに、いくつのソケットア ドレスがあるかを示す addrcnt 引数は、配列で渡されます。アドレスのすべて は、暗黙のアソシエーションが設定されるときだけ、使用されることに注意して ください。これによって、アソシエーションへの sctp_send() が続く sctp_connectx() を行うような、ユーザと同等な振る舞いができます。 sinfo->sinfo_assoc_id フィールドが 0 であるなら、最初のアドレスは、アソシ エーション ID の代わりにアソシエーションを検索するために使用されることに 注意してください。アドレスとアソシエーション ID の両方が指定されるなら、 アソシエーション ID が優先されます。 戻り値 呼び出しは、送信された文字数を返し、エラーが発生したなら、-1 を返します。 エラー sctp_send() システムコールは、次の場合に失敗します: [EBADF] 無効の記述子が、指定されました。 [ENOTSOCK] 引数 s がソケットではありません。 [EFAULT] 無効のユーザ空間アドレスが、引数に指定されました。 [EMSGSIZE] ソケットは、メッセージが不可分に送信されることを必要 と、送信されるメッセージのサイズで、これは不可能となり ます。 [EAGAIN] ソケットは、非ブロッキングとマークされ、要求された操作 は、ブロックされます。 [ENOBUFS] システムは、内部のバッファを割り付けることができません でした。バッファが利用可能になるとき、操作は成功するか もしれません。 [ENOBUFS] ネットワークインタフェースの出力キューが、満杯でした。 一般的に、これは、インタフェースが、送信することを停止 しましたが、一時的な輻輳によって引き起こされるかもしれ ないことを示します。 [EHOSTUNREACH] リモートホストが、到達不可能でした。 [ENOTCONN] 1 対 1 のスタイルのソケットでは、アソシエーションは、 存在しません。 [ECONNRESET] ユーザが、データをピアに送信することを試みていた間に、 スタックによってアボートを受信しました。 [ENOENT] 1 対多のスタイルのソケットでは、アドレスは、指定されな いので、アソシエーションを、位置づけることができない か、または SCTP_ABORT フラグは、存在しないアソシエー ションで指定されました。 [EPIPE] ソケットは、それ以上データを送信することができません (SBS_CANTSENDMORE は、ソケットで設定されています)。こ れは、ソケットが接続されていなくて、1 対 1 のスタイル のソケットであることを通常意味します。 関連項目 getsockopt(2), recv(2), select(2), sendmsg(2), socket(2), write(2), sctp_connectx(3), sctp_recvmsg(3), sctp_sendmsg(3), sctp(4) バグ sctp_send() は、1 つの終点の下で複数のアソシエーションがあるので、書き込 みの選択は、1 対 1 のスタイルのソケットのために単に動作します。 FreeBSD 11.4 December 15, 2006 FreeBSD 11.4