.\" Updated 2012-05-04, Akihiro MOTOKI <amotoki@gmail.com>
.\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
.\"
-.TH SEND 2 2013\-12\-12 Linux "Linux Programmer's Manual"
+.TH SEND 2 2014\-08\-19 Linux "Linux Programmer's Manual"
.SH 名前
send, sendto, sendmsg \- ソケットへメッセージを送る
.SH 書式
メッセージがソケットの送信バッファに入れることができない場合、 \fBsend\fP() は通常は停止 (block) する (ソケットが非停止
(nonblocking) I/O モード でない場合)。非停止モードの場合にはエラー \fBEAGAIN\fP か \fBEWOULDBLOCK\fP
で失敗する。 いつデータをさらに送信できるようになるかを知るために、 \fBselect\fP(2) コールを使用することができる。
-.PP
-.\" FIXME ? document MSG_PROXY (which went away in 2.3.15)
+.SS フラグ引き数
+.\" FIXME . ? document MSG_PROXY (which went away in 2.3.15)
\fIflags\fP 引き数は、以下のフラグの (0 個以上の) ビット単位の論理和を とったものを指定する。
.TP
-\fBMSG_CONFIRM\fP (since Linux 2.3.15)
+\fBMSG_CONFIRM\fP (Linux 2.3.15 以降)
転送処理に進展があった、つまり相手側から成功の応答を受けたことをリンク層に 知らせる。リンク層がこの通知を受け取らなかった場合には、通常どおり
(ユニキャスト ARP を使うなどの方法で) 近傍 (neighbor) の再検索を行う。 \fBSOCK_DGRAM\fP と \fBSOCK_RAW\fP
のソケットに対してのみ有効で、現在のところ IPv4 と IPv6 のみ実装されている。 詳しくは \fBarp\fP(7) 参照のこと。
\fBMSG_EOR\fP (Linux 2.2 以降)
レコードの終了を指示する (\fBSOCK_SEQPACKET\fP のようにこの概念に対応しているソケット種別のときに有効)。
.TP
-\fBMSG_MORE\fP (since Linux 2.4.4)
+\fBMSG_MORE\fP (Linux 2.4.4 以降)
呼び出し元にさらに送るデータがあることを示す。 このフラグは TCP ソケットとともに使用され、 \fBTCP_CORK\fP
ソケットオプションと同じ効果が得られる (\fBtcp\fP(7) を参照)。 \fBTCP_CORK\fP との違いは、このフラグを使うと呼び出し単位で
この機能を有効にできる点である。
\fBMSG_OOB\fP
\fI帯域外 (out\-of\-band)\fP データをサポートするソケット (例えば \fBSOCK_STREAM\fP) で \fI帯域外\fP
データを送る。下位プロトコルも \fI帯域外\fP データをサポートしている必要がある。
-.PP
-\fImsghdr\fP 構造体の内容は以下の通り。 各フィールドの正確な記述については \fBrecv\fP(2) と以下の説明を参照すること。
+.SS sendmsg()
+\fBsendmsg\fP() で利用されている \fImsghdr\fP 構造体は以下の通り。
.in +4n
.nf
size_t msg_iovlen; /* msg_iov の要素数 */
void *msg_control; /* 補助データ (後述) */
size_t msg_controllen; /* 補助データバッファ長 */
- int msg_flags; /* 受信メッセージのフラグ */
+ int msg_flags; /* フラグ (未使用) */
};
.fi
.in
.PP
+フィールド \fImsg_name\fP は、 未接続のソケットでデータグラムの宛先アドレスを指定するのに使用される。
+このフィールドはアドレスを格納したバッファを指す。 フィールド \fImsg_namelen\fP にはアドレスの大きさを設定しなければならない。
+接続済のソケットについては、これらのフィールドにはそれぞれ NULL と 0 を指定しなければならない。
+
+フィールド \fBmsg_iov\fP と \fImsg_iovlen\fP は scatter\-gather 用の場所を指定する。 \fBwritev\fP(2)
+と同じ。
+
+フィールド \fImsg_control\fP と \fImsg_controllen\fP を使用して制御情報を送信することができる。
+カーネルが処理できる制御バッファのソケットあたりの最大長は、 \fI/proc/sys/net/core/optmem_max\fP の値に制限されている。
+\fBsocket\fP(7) を参照。
+
.\" Still to be documented:
.\" Send file descriptors and user credentials using the
.\" msg_control* fields.
-.\" The flags returned in msg_flags.
-\fImsg_control\fP と \fImsg_controllen\fP メンバーを使用して制御情報を送信することができる。
-カーネルが処理できる制御バッファのソケットあたりの最大長は、 \fI/proc/sys/net/core/optmem_max\fP の値に制限されている。
-\fBsocket\fP(7) を参照。
+フィールド \fImsg_flags\fP は無視される。
.SH 返り値
-On success, these calls return the number of bytes sent. On error, \-1 is
-returned, and \fIerrno\fP is set appropriately.
+成功した場合、これらのシステムコールは送信されたバイト数を返す。 エラーの場合、 \-1 を返し、 \fIerrno\fP を適切に設定にする。
.SH エラー
これらはソケット層で発生する一般的なエラーである。これ以外に、下層の プロトコル・モジュールで生成されたエラーが返されるかもしれない。
これらについては、それぞれのマニュアルを参照すること。
ソケットが非停止に設定されており、 要求された操作が停止した。 POSIX.1\-2001 は、この場合にどちらのエラーを返すことも認めており、 これら
2 つの定数が同じ値を持つことも求めていない。 したがって、移植性が必要なアプリケーションでは、両方の可能性を 確認すべきである。
.TP
+\fBEAGAIN\fP
+(インターネットドメインデータグラムソケットの場合) \fIsockfd\fP が参照するソケットがそれ以前にアドレスにバインドされておらず、
+そのソケットに一時ポートをバインドしようとした際に、 一時ポートとして使用する範囲のポート番号がすべて使用中であった。 \fBip\fP(7) の
+\fI/proc/sys/net/ipv4/ip_local_port_range\fP の議論を参照のこと。
+.TP
\fBEBADF\fP
無効なディスクリプターが指定された。
.TP
POSIX.1\-2001 には、 \fBMSG_OOB\fP と \fBMSG_EOR\fP フラグだけが記載されている。 POSIX.1\-2008 では
\fBMSG_NOSIGNAL\fP が規格に追加されている。 \fBMSG_CONFIRM\fP フラグは Linux での拡張である。
.SH 注意
-上記のプロトタイプは Single UNIX Specification に従っている。 glibc2 も同様である。 \fIflags\fP 引き数は
-4.x BSD では \fIint\fP であり、 libc4 と libc5 では \fIunsigned int\fP である。 \fIlen\fP 引き数は 4.x
-BSD と libc4 では \fIint\fP であり、 libc5 では \fIsize_t\fP である。 \fIaddrlen\fP 引き数は 4.x BSD と
-libc4 と libc5 では \fIint\fP である。 \fBaccept\fP(2) も参照すること。
-
.\" glibc bug raised 12 Mar 2006
.\" http://sourceware.org/bugzilla/show_bug.cgi?id=2448
.\" The problem is an underlying kernel issue: the size of the
\fBsendmmsg\fP(2), \fBshutdown\fP(2), \fBsocket\fP(2), \fBwrite\fP(2), \fBcmsg\fP(3),
\fBip\fP(7), \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.63 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.77 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。