日本語 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_SENDMSG(3) FreeBSD ライブラリ関数マニュアル SCTP_SENDMSG(3) 名称 sctp_sendmsg, sctp_sendmsgx -- SCTP ソケットへメッセージを送信する ライブラリ 標準 C ライブラリ (libc, -lc) 書式 #include <sys/types.h> #include <sys/socket.h> #include <netinet/sctp.h> ssize_t sctp_sendmsg(int s, const void *msg, size_t len, const struct sockaddr *to, socklen_t tolen, uint32_t ppid, uint32_t flags, uint16_t stream_no, uint32_t timetolive, uint32_t context); ssize_t sctp_sendmsgx(int s, const void *msg, size_t len, const struct sockaddr *to, int addrcnt, uint32_t ppid, uint32_t flags, uint16_t stream_no, uint32_t timetolive, uint32_t context); 解説 sctp_sendmsg() システムコールは、メッセージを別の SCTP 終点 (endpoint) に 転送するために使用されます。sctp_sendmsg() は、いつでも、使用できます。ソ ケットが 1 対多のタイプ (SOCK_SEQPACKET) のソケットであるなら、存在しない アソシエーションであるアドレスへ送信する試みは、暗黙のうちに新しいアソシ エーションを作成します。そのようなインスタンスのデータ送信は、SCTP の 4 つの方法のハンドシェイクの 3 番目の行程で送信されるデータをもたらします。 ソケットが 1 対 1 のタイプ (SOCK_STREAM) のソケットであるなら、アソシエー ションは、(connect(2) システムコールの使用によって) 存在していなければな らないことに注意してください。接続されれていない 1 対 1 のソケットで sctp_sendmsg() または sctp_sendmsgx() を呼び出すことは、errno が ENOTCONN に設定され、-1 が返され、メッセージが、送信されない結果となります。 ターゲットのアドレスは、そのサイズを tolen で指定して to で与えられます。 メッセージ msg の長さは、len で与えられます。メッセージが基本的なプロトコ ルを通して不可分に渡されるには長すぎるなら、errno は、EMSGSIZE に設定され て -1 が返され、メッセージは、送信されません。 配信のための失敗の兆候なしに、sctp_sendmsg(3) 呼び出しで暗黙ではありませ ん。局所的に検出されたエラーは、-1 の返り値によって示されます。 転送されるメッセージを保持するための空間がソケットで利用可能でないなら、 sctp_sendmsg(3) は、ソケットが非ブロッキング I/O モードに置かれていないな ら、通常、ブロックします。select(2) システムコールは、より多くのデータを 1 対 1 のタイプ (SOCK_STREAM) のソケットに送信することが、いつ可能となる かを決定するために使用されます。 ppid 引数は、スタックからピア (相手側) 終点に透過的に渡される 32 ビットの 不透明な (サイズおよび形がわからない) 値です。それはメッセージの受信で利 用可能となります (sctp_recvmsg(3) 参照)。スタックは、バイト順に関係なしで この値を渡すことに注意してください。 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 は、存続期間をベースとする時間がデータに適用されているこ とを示すために使用されます。つぎに timetolive 引数は、データが転送される ことを試みられる多くのミリ秒です。多くのミリ秒が経過して、ピアがデータを 承認していないなら、データは、スキップされ、もはや送信されません。このポ リシは、データがかつて送信されることさえ保証しないことに注意してくださ い。多量のデータがキューに入れられて混雑する場合に、最初の転送が行われる 前に timetolive は、期限が切れるかもしれません。 SCTP_PR_SCTP_BUF ベースのポリシは、timetolive フィールドを外向きの送信 キューで許された合計のバイト数に変換します。その数か、またはより多くのバ イトがキューに入れられているなら、他のバッファベースの送信が、削除するた めに検索され、スキップされます。また、このポリシは、バッファベースの送信 がキューになく、timetolive バイトによって指定された最大がキューに入れられ ているなら、データが決して送信されないことに注意してください。 SCTP_PR_SCTP_RTX ポリシは、timetolive を許可する再転送のの数に変換しま す。このポリシは、常に最小で 1 つの送信がデータで試みられることを保証しま す。その後、わずか timetolive の再転送が、データをスキップする前に行われ ます。 stream_no は、利用者がメッセージを送信したい SCTP ストリームです。SCTP の ストリームは、規則付けられたメッセージの信頼できる (または、部分的に信頼 できる) フロー (流れ) です。context フィールドは、メッセージを送信するこ とができないイベントだけに使用されます。これは、その通知が有効であるな ら、(sctp(4) 参照) 失敗した送信が与えられるとき、スタックが保有し、ユーザ に与える不透明な (サイズおよび形がわからない) 値です。通常、ユーザプロセ スは、送信を実行することができないとき、いくつかのアプリケーション特有の データ構造にインデックスを付けるこの値を使用することができます。 sctp_sendmsgx() は、引数 to で sockaddr 構造の配列を取り、いくつのアドレ スが配列中にあるかを指定する追加引数 addrcnt を追加することを除いて、 sctp_sendmsg() と同じです。これによって、呼び出し側は、まるで sctp_connectx() がアソシエーションを設定するために呼び出されているかのよ うに複数のアドレスを渡すアソシエーション暗黙のうちに設定できます。 戻り値 呼び出しは、送信された文字数を返し、エラーが発生したなら、-1 を返します。 エラー sctp_sendmsg() システムコールは、次の場合に失敗します: [EBADF] 無効の記述子が、指定されました。 [ENOTSOCK] 引数 s が、ソケットではありません。 [EFAULT] 無効のユーザ空間のアドレスが、引数に指定されました。 [EMSGSIZE] ソケットは、メッセージが不可分に送信されることを必要と し、送信されるメッセージのサイズで、これは不可能となり ます。 [EAGAIN] ソケットは、非ブロッキングとマークされ、要求された操作 は、ブロックされます。 [ENOBUFS] システムは、内部のバッファを割り付けることができません でした。バッファが利用可能になるとき、操作は成功するか もしれません。 [ENOBUFS] ネットワークインタフェースの出力キューが、満杯でした。 一般的に、これは、インタフェースが、送信することを停止 しましたが、一時的な輻輳によって引き起こされるかもしれ ないことを示します。 [EHOSTUNREACH] リモートホストが、到達不可能でした。 [ENOTCONN] 1 対 1 のスタイルのソケットでは、アソシエーションは、 存在しません。 [ECONNRESET] ユーザが、データをピアに送信することを試みていた間に、 スタックによってアボートを受信しました。 [ENOENT] 1 対多のスタイルのルソケットでは、アドレスは、指定され ないので、アソシエーションを、位置づけることができない か、または SCTP_ABORT フラグは、存在しないアソシエー ションで指定されました。 [EPIPE] ソケットは、それ以上データを送信することができません (SBS_CANTSENDMORE は、ソケットで設定されています)。こ れは、ソケットが接続されていなくて、1 対 1 のスタイル のソケットであることを通常意味します。 関連項目 connect(2), getsockopt(2), recv(2), select(2), sendmsg(2), socket(2), write(2), sctp_connectx(3), sctp(4) バグ 1 対多のスタイルのソケットでは、sctp_sendmsg() または sctp_sendmsgx() は、1 つの終点で複数のアソシエーションがあるので、書き込みでの選択は、1 対 1 のスタイルのソケットのためだけに動作します。 FreeBSD 11.4 December 15, 2006 FreeBSD 11.4