OSDN Git Service

(split) LDP: Restore and add Copyrights for draft pages
[linuxjm/LDP_man-pages.git] / draft / man2 / send.2
1 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
2 .\" All rights reserved.
3 .\"
4 .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\"    notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\"    notice, this list of conditions and the following disclaimer in the
12 .\"    documentation and/or other materials provided with the distribution.
13 .\" 3. All advertising materials mentioning features or use of this software
14 .\"    must display the following acknowledgement:
15 .\"     This product includes software developed by the University of
16 .\"     California, Berkeley and its contributors.
17 .\" 4. Neither the name of the University nor the names of its contributors
18 .\"    may be used to endorse or promote products derived from this software
19 .\"    without specific prior written permission.
20 .\"
21 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 .\" SUCH DAMAGE.
32 .\" %%%LICENSE_END
33 .\"
34 .\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
35 .\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
36 .\" Modified Oct 1998 by Andi Kleen
37 .\" Modified Oct 2003 by aeb
38 .\" Modified 2004-07-01 by mtk
39 .\"
40 .\"*******************************************************************
41 .\"
42 .\" This file was generated with po4a. Translate the source file.
43 .\"
44 .\"*******************************************************************
45 .\"
46 .\" Japanese Version Copyright (c) 1996 HANATAKA Shinya all rights reserved.
47 .\" Translated 1997-02-23, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
48 .\" Updated 1999-08-15, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
49 .\" Updated 2000-01-13, Kentaro Shirakata <argrath@ub32.org>
50 .\" Updated 2001-01-30, Kentaro Shirakata <argrath@ub32.org>
51 .\" Updated 2005-03-14, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
52 .\" Updated 2005-12-26, Akihiro MOTOKI
53 .\" Updated 2006-04-15, Akihiro MOTOKI, LDP v2.29
54 .\" Updated 2008-04-13, Akihiro MOTOKI, LDP v3.20
55 .\" Updated 2012-05-04, Akihiro MOTOKI <amotoki@gmail.com>
56 .\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
57 .\"
58 .TH SEND 2 2012\-04\-23 Linux "Linux Programmer's Manual"
59 .SH 名前
60 send, sendto, sendmsg \- ソケットへメッセージを送る
61 .SH 書式
62 .nf
63 \fB#include <sys/types.h>\fP
64 \fB#include <sys/socket.h>\fP
65 .sp
66 \fBssize_t send(int \fP\fIsockfd\fP\fB, const void *\fP\fIbuf\fP\fB, size_t \fP\fIlen\fP\fB, int \fP\fIflags\fP\fB);\fP
67
68 \fBssize_t sendto(int \fP\fIsockfd\fP\fB, const void *\fP\fIbuf\fP\fB, size_t \fP\fIlen\fP\fB, int \fP\fIflags\fP\fB,\fP
69 \fB               const struct sockaddr *\fP\fIdest_addr\fP\fB, socklen_t \fP\fIaddrlen\fP\fB);\fP
70
71 \fBssize_t sendmsg(int \fP\fIsockfd\fP\fB, const struct msghdr *\fP\fImsg\fP\fB, int \fP\fIflags\fP\fB);\fP
72 .fi
73 .SH 説明
74 システムコール \fBsend\fP(), \fBsendto\fP(), \fBsendmsg\fP()  は、もう一方のソケットへメッセージを転送するのに使用される。
75 .PP
76 \fBsend\fP()  は、ソケットが \fI接続された (connected)\fP 状態にある場合にのみ使用できる
77 (つまり、どの相手に送信するかは既知である)。 \fBsend\fP()  と \fBwrite\fP(2)  の違いは、引き数に \fIflags\fP
78 があるかどうかだけである。 引き数 \fIflags\fP にフラグが指定されない場合、 \fBsend\fP()  は \fBwrite\fP(2)  と等価である。
79 また、
80
81     send(sockfd, buf, len, flags);
82
83 は以下と等価である。
84
85     sendto(sockfd, buf, len, flags, NULL, 0);
86 .PP
87 引き数 \fIsockfd\fP は、データを送信するパケットのファイル・ディスクリプタである。
88 .PP
89 \fBsendto\fP()  は、接続型 (connection\-mode) のソケット (\fBSOCK_STREAM\fP,
90 \fBSOCK_SEQPACKET\fP)  で 使用された場合、引き数 \fIdest_addr\fP と \fIaddrlen\fP は無視される (各々の引き数が
91 NULL と 0 でない場合は \fBEISCONN\fP エラーも返される)。 また、ソケットが実際には接続されていなかった時には \fBENOTCONN\fP
92 エラーが返される。 接続型のソケット以外で使用された場合は、接続先のアドレスは \fIdest_addr\fP で与えられ、そのサイズは \fIaddrlen\fP
93 で指定される。 \fBsendmsg\fP()  では、接続先のアドレスは \fImsg.msg_name\fP で与えられ、そのサイズは
94 \fImsg.msg_namelen\fP で指定される。
95 .PP
96 \fBsend\fP()  と \fBsendto\fP()  では、メッセージは \fIbuf\fP に格納されており、その長さは \fIlen\fP であると解釈される。
97 \fBsendmsg\fP()  では、メッセージは 配列 \fImsg.msg_iov\fP の各要素が指す位置に格納されている。 \fBsendmsg\fP()
98 では、補助データ (制御情報とも呼ばれる) を送信することもできる。
99 .PP
100 メッセージ長が長過ぎるために、そのソケットが使用するプロトコルでは、 メッセージをソケットに渡されたままの形で送信することができない場合、
101 \fBEMSGSIZE\fP エラーが返され、そのメッセージは転送されない。
102 .PP
103 \fBsend\fP()  では、配送の失敗の通知は明示的に行われる。 ローカル側でエラーが検出された場合は、返り値 \-1 として通知される。
104 .PP
105 メッセージがソケットの送信バッファに入れることができない場合、 \fBsend\fP()  は通常は停止 (block) する (ソケットが非停止
106 (nonblocking) I/O モード でない場合)。非停止モードの場合にはエラー \fBEAGAIN\fP か \fBEWOULDBLOCK\fP
107 で失敗する。 いつデータをさらに送信できるようになるかを知るために、 \fBselect\fP(2)  コールを使用することができる。
108 .PP
109 .\" FIXME ? document MSG_PROXY (which went away in 2.3.15)
110 \fIflags\fP 引き数は、以下のフラグの (0 個以上の) ビット単位の論理和を とったものを指定する。
111 .TP 
112 \fBMSG_CONFIRM\fP (Linux 2.3.15 以降)
113 転送処理に進展があった、つまり相手側から成功の応答を受けたことをリンク層に 知らせる。リンク層がこの通知を受け取らなかった場合には、通常どおり
114 (ユニキャスト ARP を使うなどの方法で) 近傍 (neighbor) の再検索を行う。 \fBSOCK_DGRAM\fP と \fBSOCK_RAW\fP
115 のソケットに対してのみ有効で、現在のところ IPv4 と IPv6 のみ実装されている。 詳しくは \fBarp\fP(7)  参照のこと。
116 .TP 
117 \fBMSG_DONTROUTE\fP
118 パケットを送り出すのにゲートウェイを使用せず、 直接接続されているネットワーク上のホストだけに送る。 通常、このフラグは診断 (diagnostic)
119 やルーティング・プログラムに よってのみ使用される。このフラグは、経路制御が行われるプロトコルファミリー
120 に対してのみ定義されている。パケットソケットには定義されていない。
121 .TP 
122 \fBMSG_DONTWAIT\fP (Linux 2.2 以降)
123 非停止 (nonblocking) 操作を有効にする。操作が停止されるような場合には \fBEAGAIN\fP か \fBEWOULDBLOCK\fP
124 を返すようにする (\fBfcntl\fP(2)  の \fBF_SETFL\fP で \fBO_NONBLOCK\fP フラグを指定することによっても有効にできる)。
125 .TP 
126 \fBMSG_EOR\fP (Linux 2.2 以降)
127 レコードの終了を指示する (\fBSOCK_SEQPACKET\fP のようにこの概念に対応しているソケット種別のときに有効)。
128 .TP 
129 \fBMSG_MORE\fP (Linux 2.4.4 以降)
130 呼び出し元にさらに送るデータがあることを示す。 このフラグは TCP ソケットとともに使用され、 \fBTCP_CORK\fP
131 ソケットオプションと同じ効果が得られる (\fBtcp\fP(7)  を参照)。 \fBTCP_CORK\fP との違いは、このフラグを使うと呼び出し単位で
132 この機能を有効にできる点である。
133
134 Linux 2.6 以降では、このフラグは UDP ソケットでもサポートされており、
135 このフラグ付きで送信された全てのデータを一つのデータグラムにまとめて 送信することを、カーネルに知らせる。まとめられたデータグラムは、
136 このフラグを指定せずにこのシステムコールが実行された際に初めて送信される (\fBudp\fP(7)  に記載されているソケットオプション
137 \fBUDP_CORK\fP も参照)。
138 .TP 
139 \fBMSG_NOSIGNAL\fP (Linux 2.2 以降)
140 ストリーム指向のソケットで相手側が接続を切断した時に、エラーとして \fBSIGPIPE\fP を送信しないように要求する。この場合でも \fBEPIPE\fP
141 は返される。
142 .TP 
143 \fBMSG_OOB\fP
144 \fI帯域外 (out\-of\-band)\fP データをサポートするソケット (例えば \fBSOCK_STREAM\fP)  で \fI帯域外\fP
145 データを送る。下位プロトコルも \fI帯域外\fP データをサポートしている必要がある。
146 .PP
147 \fImsghdr\fP 構造体の内容は以下の通り。 各フィールドの正確な記述については \fBrecv\fP(2)  と以下の説明を参照すること。
148 .in +4n
149 .nf
150
151 struct msghdr {
152     void         *msg_name;       /* 追加のアドレス */
153     socklen_t     msg_namelen;    /* アドレスのサイズ */
154     struct iovec *msg_iov;        /* scatter/gather 配列 */
155     size_t        msg_iovlen;     /* msg_iov の要素数 */
156     void         *msg_control;    /* 補助データ (後述) */
157     size_t        msg_controllen; /* 補助データバッファ長 */
158     int           msg_flags;      /* 受信メッセージのフラグ */
159 };
160 .fi
161 .in
162 .PP
163 .\" Still to be documented:
164 .\"  Send file descriptors and user credentials using the
165 .\"  msg_control* fields.
166 .\"  The flags returned in msg_flags.
167 \fImsg_control\fP と \fImsg_controllen\fP メンバーを使用して制御情報を送信することができる。
168 カーネルが処理できる制御バッファのソケットあたりの最大長は、 \fI/proc/sys/net/core/optmem_max\fP の値に制限されている。
169 \fBsocket\fP(7)  を参照。
170 .SH 返り値
171 成功した場合、これらのシステムコールは送信されたバイト数を返す。 エラーの場合、 \-1 を返し、 \fIerrno\fP を適切に設定にする。
172 .SH エラー
173 これらはソケット層で発生する一般的なエラーである。これ以外に、下層の プロトコル・モジュールで生成されたエラーが返されるかもしれない。
174 これらについては、それぞれのマニュアルを参照すること。
175 .TP 
176 \fBEACCES\fP
177 (UNIX ドメインソケットの場合; パス名で識別される。)
178
179 ソケット・ファイルへの書き込み許可がなかったか、パス名へ到達するまでの
180 ディレクトリのいずれかに対する検索許可がなかった。
181 (\fBpath_resolution\fP(7) も参照のこと)
182 .sp
183 (UDP ソケットの場合) ユニキャストアドレスであるかのように、
184 ネットワークアドレスやブロードキャストアドレスへの送信が試みられた。
185 .TP 
186 \fBEAGAIN\fP または \fBEWOULDBLOCK\fP
187 .\" Actually EAGAIN on Linux
188 ソケットが非停止に設定されており、 要求された操作が停止した。 POSIX.1\-2001 は、この場合にどちらのエラーを返すことも認めており、 これら
189 2 つの定数が同じ値を持つことも求めていない。 したがって、移植性が必要なアプリケーションでは、両方の可能性を 確認すべきである。
190 .TP 
191 \fBEBADF\fP
192 無効なディスクリプターが指定された。
193 .TP 
194 \fBECONNRESET\fP
195 接続が接続相手によりリセットされた。
196 .TP 
197 \fBEDESTADDRREQ\fP
198 ソケットが接続型 (connection\-mode) ではなく、 かつ送信先のアドレスが設定されていない。
199 .TP 
200 \fBEFAULT\fP
201 ユーザー空間として不正なアドレスがパラメーターとして指定された。
202 .TP 
203 \fBEINTR\fP
204 データが送信される前に、シグナルが発生した。 \fBsignal\fP(7)  参照。
205 .TP 
206 \fBEINVAL\fP
207 不正な引き数が渡された。
208 .TP 
209 \fBEISCONN\fP
210 接続型ソケットの接続がすでに確立していたが、受信者が指定されていた。 (現在のところ、この状況では、このエラーが返されるか、
211 受信者の指定が無視されるか、のいずれかとなる)
212 .TP 
213 \fBEMSGSIZE\fP
214 .\" (e.g., SOCK_DGRAM )
215 そのソケット種別 ではソケットに渡されたままの形でメッセージを送信する必要があるが、 メッセージが大き過ぎるため送信することができない。
216 .TP 
217 \fBENOBUFS\fP
218 ネットワーク・インターフェースの出力キューが一杯である。 一般的には、一時的な輻輳 (congestion) のためにインターフェースが
219 送信を止めていることを意味する。 (通常、Linux ではこのようなことは起こらない。デバイスのキューが
220 オーバーフローした場合にはパケットは黙って捨てられる)
221 .TP 
222 \fBENOMEM\fP
223 メモリが足りない。
224 .TP 
225 \fBENOTCONN\fP
226 ソケットが接続されておらず、接続先も指定されていない。
227 .TP 
228 \fBENOTSOCK\fP
229 引き数 \fIsockfd\fP はソケットではない。
230 .TP 
231 \fBEOPNOTSUPP\fP
232 引き数 \fIflags\fP のいくつかのビットが、そのソケット種別では不適切なものである。
233 .TP 
234 \fBEPIPE\fP
235 接続指向のソケットでローカル側が閉じられている。 この場合、 \fBMSG_NOSIGNAL\fP が設定されていなければ、プロセスには \fBSIGPIPE\fP
236 も同時に送られる。
237 .SH 準拠
238 4.4BSD, SVr4, POSIX.1\-2001.  (これらの関数コールは 4.2BSD で最初に登場した)。
239 .LP
240 POSIX.1\-2001 には、 \fBMSG_OOB\fP と \fBMSG_EOR\fP フラグだけが記載されている。 POSIX.1\-2008 では
241 \fBMSG_NOSIGNAL\fP が規格に追加されている。 \fBMSG_CONFIRM\fP フラグは Linux での拡張である。
242 .SH 注意
243 上記のプロトタイプは Single UNIX Specification に従っている。 glibc2 も同様である。 \fIflags\fP 引き数は
244 4.x BSD では \fIint\fP であり、 libc4 と libc5 では \fIunsigned int\fP である。 \fIlen\fP 引き数は 4.x
245 BSD と libc4 では \fIint\fP であり、 libc5 では \fIsize_t\fP である。 \fIaddrlen\fP 引き数は 4.x BSD と
246 libc4 と libc5 では \fIint\fP である。 \fBaccept\fP(2)  も参照すること。
247
248 .\" glibc bug raised 12 Mar 2006
249 .\" http://sourceware.org/bugzilla/show_bug.cgi?id=2448
250 .\" The problem is an underlying kernel issue: the size of the
251 .\" __kernel_size_t type used to type this field varies
252 .\" across architectures, but socklen_t is always 32 bits.
253 POSIX.1\-2001 では、構造体 \fImsghdr\fP のフィールド \fImsg_controllen\fP は \fIsocklen_t\fP
254 型であるべきだとされているが、 現在の glibc では \fIsize_t\fP 型である。
255
256 \fBsendmmsg\fP(2)  には、一度の呼び出しでの複数のデータグラムの送信に使用できる
257 Linux 固有の システムコールに関する情報が書かれている。
258 .SH バグ
259 Linux は \fBENOTCONN\fP を返す状況で \fBEPIPE\fP を返すことがある。
260 .SH 例
261 \fBsendto\fP()  の利用例が \fBgetaddrinfo\fP(3)  に記載されている。
262 .SH 関連項目
263 \fBfcntl\fP(2), \fBgetsockopt\fP(2), \fBrecv\fP(2), \fBselect\fP(2), \fBsendfile\fP(2),
264 \fBsendmmsg\fP(2), \fBshutdown\fP(2), \fBsocket\fP(2), \fBwrite\fP(2), \fBcmsg\fP(3),
265 \fBip\fP(7), \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7)
266 .SH この文書について
267 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.53 の一部
268 である。プロジェクトの説明とバグ報告に関する情報は
269 http://www.kernel.org/doc/man\-pages/ に書かれている。