From 743ba1c350207bd2a846767c4af1cccbc5aed552 Mon Sep 17 00:00:00 2001 From: Akihiro MOTOKI Date: Fri, 4 May 2012 22:57:14 +0900 Subject: [PATCH] (split) LDP: send.2 draft. --- draft/man2/send.2 | 254 +++++++++++++++++++++++++++++++++++++++++++++++++++ po4a/socket/po/ja.po | 12 ++- 2 files changed, 262 insertions(+), 4 deletions(-) create mode 100644 draft/man2/send.2 diff --git a/draft/man2/send.2 b/draft/man2/send.2 new file mode 100644 index 00000000..2ce1aa5b --- /dev/null +++ b/draft/man2/send.2 @@ -0,0 +1,254 @@ +.\" Copyright (c) 1983, 1991 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" Modified 1993-07-24 by Rik Faith +.\" Modified 1996-10-22 by Eric S. Raymond +.\" Modified Oct 1998 by Andi Kleen +.\" Modified Oct 2003 by aeb +.\" Modified 2004-07-01 by mtk +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH SEND 2 2012\-04\-23 Linux "Linux Programmer's Manual" +.SH 名前 +send, sendto, sendmsg \- ソケットへメッセージを送る +.SH 書式 +.nf +\fB#include \fP +\fB#include \fP +.sp +\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 + +\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 +\fB const struct sockaddr *\fP\fIdest_addr\fP\fB, socklen_t \fP\fIaddrlen\fP\fB);\fP + +\fBssize_t sendmsg(int \fP\fIsockfd\fP\fB, const struct msghdr *\fP\fImsg\fP\fB, int \fP\fIflags\fP\fB);\fP +.fi +.SH 説明 +システムコール \fBsend\fP(), \fBsendto\fP(), \fBsendmsg\fP() は、もう一方のソケットへメッセージを転送するのに使用される。 +.PP +\fBsend\fP() は、ソケットが \fI接続された (connected)\fP 状態にある場合にのみ使用できる +(つまり、どの相手に送信するかは既知である)。 \fBsend\fP() と \fBwrite\fP(2) の違いは、引き数に \fIflags\fP +があるかどうかだけである。 引き数 \fIflags\fP にフラグが指定されない場合、 \fBsend\fP() は \fBwrite\fP(2) と等価である。 +また、 + + send(sockfd, buf, len, flags); + +は以下と等価である。 + + sendto(sockfd, buf, len, flags, NULL, 0); +.PP +引き数 \fIsockfd\fP は、データを送信するパケットのファイル・ディスクリプタである。 +.PP +\fBsendto\fP() は、接続型 (connection\-mode) のソケット (\fBSOCK_STREAM\fP, +\fBSOCK_SEQPACKET\fP) で 使用された場合、引き数 \fIdest_addr\fP と \fIaddrlen\fP は無視される (各々の引き数が +NULL と 0 でない場合は \fBEISCONN\fP エラーも返される)。 また、ソケットが実際には接続されていなかった時には \fBENOTCONN\fP +エラーが返される。 接続型のソケット以外で使用された場合は、接続先のアドレスは \fIdest_addr\fP で与えられ、そのサイズは \fIaddrlen\fP +で指定される。 \fBsendmsg\fP() では、接続先のアドレスは \fImsg.msg_name\fP で与えられ、そのサイズは +\fImsg.msg_namelen\fP で指定される。 +.PP +\fBsend\fP() と \fBsendto\fP() では、メッセージは \fIbuf\fP に格納されており、その長さは \fIlen\fP であると解釈される。 +\fBsendmsg\fP() では、メッセージは 配列 \fImsg.msg_iov\fP の各要素が指す位置に格納されている。 \fBsendmsg\fP() +では、補助データ (制御情報とも呼ばれる) を送信することもできる。 +.PP +メッセージ長が長過ぎるために、そのソケットが使用するプロトコルでは、 メッセージをソケットに渡されたままの形で送信することができない場合、 +\fBEMSGSIZE\fP エラーが返され、そのメッセージは転送されない。 +.PP +\fBsend\fP() では、配送の失敗の通知は明示的に行われる。 ローカル側でエラーが検出された場合は、返り値 \-1 として通知される。 +.PP +メッセージがソケットの送信バッファに入れることができない場合、 \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) +\fIflags\fP 引き数は、以下のフラグの (0 個以上の) ビット単位の論理和を とったものを指定する。 +.TP +\fBMSG_CONFIRM\fP (Linux 2.3.15 以降) +転送処理に進展があった、つまり相手側から成功の応答を受けたことをリンク層に 知らせる。リンク層がこの通知を受け取らなかった場合には、通常どおり +(ユニキャスト ARP を使うなどの方法で) 近傍 (neighbor) の再検索を行う。 \fBSOCK_DGRAM\fP と \fBSOCK_RAW\fP +のソケットに対してのみ有効で、現在のところ IPv4 と IPv6 のみ実装されている。 詳しくは \fBarp\fP(7) 参照のこと。 +.TP +\fBMSG_DONTROUTE\fP +パケットを送り出すのにゲートウェイを使用せず、 直接接続されているネットワーク上のホストだけに送る。 通常、このフラグは診断 (diagnostic) +やルーティング・プログラムに よってのみ使用される。このフラグは、経路制御が行われるプロトコルファミリー +に対してのみ定義されている。パケットソケットには定義されていない。 +.TP +\fBMSG_DONTWAIT\fP (Linux 2.2 以降) +非停止 (nonblocking) 操作を有効にする。操作が停止されるような場合には \fBEAGAIN\fP か \fBEWOULDBLOCK\fP +を返すようにする (\fBfcntl\fP(2) の \fBF_SETFL\fP で \fBO_NONBLOCK\fP フラグを指定することによっても有効にできる)。 +.TP +\fBMSG_EOR\fP (Linux 2.2 以降) +レコードの終了を指示する (\fBSOCK_SEQPACKET\fP のようにこの概念に対応しているソケット種別のときに有効)。 +.TP +\fBMSG_MORE\fP (Linux 2.4.4 以降) +呼び出し元にさらに送るデータがあることを示す。 このフラグは TCP ソケットとともに使用され、 \fBTCP_CORK\fP +ソケットオプションと同じ効果が得られる (\fBtcp\fP(7) を参照)。 \fBTCP_CORK\fP との違いは、このフラグを使うと呼び出し単位で +この機能を有効にできる点である。 + +Linux 2.6 以降では、このフラグは UDP ソケットでもサポートされており、 +このフラグ付きで送信された全てのデータを一つのデータグラムにまとめて 送信することを、カーネルに知らせる。まとめられたデータグラムは、 +このフラグを指定せずにこのシステムコールが実行された際に初めて送信される (\fBudp\fP(7) に記載されているソケットオプション +\fBUDP_CORK\fP も参照)。 +.TP +\fBMSG_NOSIGNAL\fP (Linux 2.2 以降) +ストリーム指向のソケットで相手側が接続を切断した時に、エラーとして \fBSIGPIPE\fP を送信しないように要求する。この場合でも \fBEPIPE\fP +は返される。 +.TP +\fBMSG_OOB\fP +\fI帯域外 (out\-of\-band)\fP データをサポートするソケット (例えば \fBSOCK_STREAM\fP) で \fI帯域外\fP +データを送る。下位プロトコルも \fI帯域外\fP データをサポートしている必要がある。 +.PP +\fImsghdr\fP 構造体の内容は以下の通り。 各フィールドの正確な記述については \fBrecv\fP(2) と以下の説明を参照すること。 +.in +4n +.nf + +struct msghdr { + void *msg_name; /* 追加のアドレス */ + socklen_t msg_namelen; /* アドレスのサイズ */ + struct iovec *msg_iov; /* scatter/gather 配列 */ + size_t msg_iovlen; /* msg_iov の要素数 */ + void *msg_control; /* 補助データ (後述) */ + size_t msg_controllen; /* 補助データバッファ長 */ + int msg_flags; /* 受信メッセージのフラグ */ +}; +.fi +.in +.PP +.\" 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) を参照。 +.SH 返り値 +成功した場合、これらのシステムコールは送信されたバイト数を返す。 エラーの場合、 \-1 を返し、 \fIerrno\fP を適切に設定にする。 +.SH エラー +これらはソケット層で発生する一般的なエラーである。これ以外に、下層の プロトコル・モジュールで生成されたエラーが返されるかもしれない。 +これらについては、それぞれのマニュアルを参照すること。 +.TP +\fBEACCES\fP +(UNIX ドメインソケットの場合; パス名で識別される。) + +ソケット・ファイルへの書き込み許可がなかったか、パス名へ到達するまでの +ディレクトリのいずれかに対する検索許可がなかった。 +(\fBpath_resolution\fP(7) も参照のこと) +.sp +(UDP ソケットの場合) ユニキャストアドレスであるかのように、 +ネットワークアドレスやブロードキャストアドレスへの送信が試みられた。 +.TP +\fBEAGAIN\fP または \fBEWOULDBLOCK\fP +.\" Actually EAGAIN on Linux +ソケットが非停止に設定されており、 要求された操作が停止した。 POSIX.1\-2001 は、この場合にどちらのエラーを返すことも認めており、 これら +2 つの定数が同じ値を持つことも求めていない。 したがって、移植性が必要なアプリケーションでは、両方の可能性を 確認すべきである。 +.TP +\fBEBADF\fP +無効なディスクリプターが指定された。 +.TP +\fBECONNRESET\fP +接続が接続相手によりリセットされた。 +.TP +\fBEDESTADDRREQ\fP +ソケットが接続型 (connection\-mode) ではなく、 かつ送信先のアドレスが設定されていない。 +.TP +\fBEFAULT\fP +ユーザー空間として不正なアドレスがパラメーターとして指定された。 +.TP +\fBEINTR\fP +データが送信される前に、シグナルが発生した。 \fBsignal\fP(7) 参照。 +.TP +\fBEINVAL\fP +不正な引き数が渡された。 +.TP +\fBEISCONN\fP +接続型ソケットの接続がすでに確立していたが、受信者が指定されていた。 (現在のところ、この状況では、このエラーが返されるか、 +受信者の指定が無視されるか、のいずれかとなる) +.TP +\fBEMSGSIZE\fP +.\" (e.g., SOCK_DGRAM ) +そのソケット種別 ではソケットに渡されたままの形でメッセージを送信する必要があるが、 メッセージが大き過ぎるため送信することができない。 +.TP +\fBENOBUFS\fP +ネットワーク・インターフェースの出力キューが一杯である。 一般的には、一時的な輻輳 (congestion) のためにインターフェースが +送信を止めていることを意味する。 (通常、Linux ではこのようなことは起こらない。デバイスのキューが +オーバーフローした場合にはパケットは黙って捨てられる) +.TP +\fBENOMEM\fP +メモリが足りない。 +.TP +\fBENOTCONN\fP +ソケットが接続されておらず、接続先も指定されていない。 +.TP +\fBENOTSOCK\fP +引き数 \fIsockfd\fP はソケットではない。 +.TP +\fBEOPNOTSUPP\fP +引き数 \fIflags\fP のいくつかのビットが、そのソケット種別では不適切なものである。 +.TP +\fBEPIPE\fP +接続指向のソケットでローカル側が閉じられている。 この場合、 \fBMSG_NOSIGNAL\fP が設定されていなければ、プロセスには \fBSIGPIPE\fP +も同時に送られる。 +.SH 準拠 +4.4BSD, SVr4, POSIX.1\-2001. (これらの関数コールは 4.2BSD で最初に登場した)。 +.LP +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 +.\" __kernel_size_t type used to type this field varies +.\" across architectures, but socklen_t is always 32 bits. +POSIX.1\-2001 では、構造体 \fImsghdr\fP のフィールド \fImsg_controllen\fP は \fIsocklen_t\fP +型であるべきだとされているが、 現在の glibc では \fIsize_t\fP 型である。 + +\fBsendmmsg\fP(2) には、一度の呼び出しでの複数のデータグラムの送信に使用できる +Linux 固有の システムコールに関する情報が書かれている。 +.SH バグ +Linux は \fBENOTCONN\fP を返す状況で \fBEPIPE\fP を返すことがある。 +.SH 例 +\fBsendto\fP() の利用例が \fBgetaddrinfo\fP(3) に記載されている。 +.SH 関連項目 +\fBfcntl\fP(2), \fBgetsockopt\fP(2), \fBrecv\fP(2), \fBselect\fP(2), \fBsendfile\fP(2), +\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.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/po4a/socket/po/ja.po b/po4a/socket/po/ja.po index b8645b4a..e12dbeee 100644 --- a/po4a/socket/po/ja.po +++ b/po4a/socket/po/ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2012-05-01 04:22+0900\n" -"PO-Revision-Date: 2012-05-01 05:17+0900\n" +"PO-Revision-Date: 2012-05-04 03:38+0900\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -6147,9 +6147,11 @@ msgid "" "denied for one of the directories the path prefix. (See B" "(7).)" msgstr "" -"(UNIX ドメインソケットはパス名で識別される。) ソケット・ファイルへの書き込み" -"許可がなかったか、パス名へ 到達するまでのディレクトリのいずれかに対する検索許" -"可がなかった。 (B(7) も参照のこと)" +"(UNIX ドメインソケットの場合; パス名で識別される。)\n" +"\n" +"ソケット・ファイルへの書き込み許可がなかったか、パス名へ到達するまでの\n" +"ディレクトリのいずれかに対する検索許可がなかった。\n" +"(B(7) も参照のこと)" #. type: Plain text #: build/C/man2/send.2:294 @@ -6157,6 +6159,8 @@ msgid "" "(For UDP sockets) An attempt was made to send to a network/broadcast address " "as though it was a unicast address." msgstr "" +"(UDP ソケットの場合) ユニキャストアドレスであるかのように、\n" +"ネットワークアドレスやブロードキャストアドレスへの送信が試みられた。" #. Actually EAGAIN on Linux #. type: Plain text -- 2.11.0