X-Git-Url: http://git.osdn.net/view?p=linuxjm%2FLDP_man-pages.git;a=blobdiff_plain;f=draft%2Fman7%2Funix.7;h=29aa4d86dc663bb12d11ddd7e9c49ace53d1567b;hp=ca17cf2ca8afc619de37fe1b52e20d8a5b75091a;hb=ce78e9dcef1376e2ae586e5860cc3e5f593fdcc8;hpb=f12b95fe2945d9f04eba03ba5deac2982066253a diff --git a/draft/man7/unix.7 b/draft/man7/unix.7 index ca17cf2c..29aa4d86 100644 --- a/draft/man7/unix.7 +++ b/draft/man7/unix.7 @@ -12,98 +12,40 @@ .\" address that can appear in the sockaddr_un structure: pathname, .\" unnamed, and abstract. .\" -.\" Japanese Version Copyright (c) 1999 Shouichi Saito and -.\" NAKANO Takeo all rights reserved. -.\" Translated 1999-12-06, NAKANO Takeo -.\" based on the work by Shouichi Saito -.\" Updated 2003-01-07, Akihiro MOTOKI -.\" Updated 2005-02-21, Akihiro MOTOKI -.\" Updated 2005-12-26, Akihiro MOTOKI -.\" Updated 2008-08-08, Akihiro MOTOKI, LDP v3.05 +.\"******************************************************************* .\" -.\"WORD abstract namespace 抽象名前空間 -.\"WORD anonymous socket 名前無しソケット -.\"WORD credential 信任状 -.\"WORD ancillary message 補助メッセージ -.\"WORD file descriptor ファイルディスクリプタ +.\" This file was generated with po4a. Translate the source file. .\" -.\" 訳注: 訳す際も Unix は capitalize しておくこと。 -.\" LDP_man-pages 1.66→2.01 において unix → Unix の変更があり、 -.\" 意図的な表記と思われる。 -.\" -.TH UNIX 7 2008-12-01 "Linux" "Linux Programmer's Manual" -.\"O .SH NAME +.\"******************************************************************* +.TH UNIX 7 2102\-04\-16 Linux "Linux Programmer's Manual" .SH 名前 -.\"O unix, AF_UNIX, AF_LOCAL \- Sockets for local -.\"O interprocess communication -unix, AF_UNIX, AF_LOCAL \- ローカルな -プロセス間通信用のソケット -.\"O .SH SYNOPSIS +unix, AF_UNIX, AF_LOCAL \- ローカルな プロセス間通信用のソケット .SH 書式 -.B #include +\fB#include \fP .br -.B #include +\fB#include \fP -.IB unix_socket " = socket(AF_UNIX, type, 0);" +\fIunix_socket\fP\fB = socket(AF_UNIX, type, 0);\fP .br -.IB error " = socketpair(AF_UNIX, type, 0, int *" sv ");" -.\"O .SH DESCRIPTION +\fIerror\fP\fB = socketpair(AF_UNIX, type, 0, int *\fP\fIsv\fP\fB);\fP .SH 説明 -.\"O The -.\"O .B AF_UNIX -.\"O (also known as -.\"O .BR AF_LOCAL ) -.\"O socket family is used to communicate between processes on the same machine -.\"O efficiently. -.\"O Traditionally, Unix sockets can be either unnamed, -.\"O or bound to a file system pathname (marked as being of type socket). -.B AF_UNIX -.RB ( AF_LOCAL -とも言われる) ソケットファミリーは、同じマシン上でプロセス同士が -効率的に通信するために用いられる。 -伝統的に、Unix ソケットは、名前なしにもできるし、 -(ソケット型であると印のついた) ファイルシステムのパス名に -結び付けることもできる。 -.\"O Linux also supports an abstract namespace which is independent of the -.\"O file system. -さらに Linux では、ファイルシステムに依存しない -抽象名前空間 (abstract namespace) もサポートしている。 +\fBAF_UNIX\fP (\fBAF_LOCAL\fP とも言われる) ソケットファミリーは、同じマシン上で +プロセス同士が 効率的に通信するために用いられる。伝統的に、UNIX ドメイン +ソケットは、名前なしにもできるし、 (ソケット型であると印のついた) ファイル +システムのパス名に 結び付けることもできる。さらに Linux では、ファイル +システムに依存しない抽象名前空間 (abstract namespace) もサポートしている。 -.\"O Valid types are: -.\"O .BR SOCK_STREAM , -.\"O for a stream-oriented socket and -.\"O .BR SOCK_DGRAM , -.\"O for a datagram-oriented socket that preserves message boundaries -.\"O (as on most Unix implementations, Unix domain datagram -.\"O sockets are always reliable and don't reorder datagrams); -.\"O and (since Linux 2.6.4) -.\"O .BR SOCK_SEQPACKET , -.\"O for a connection-oriented socket that preserves message boundaries -.\"O and delivers messages in the order that they were sent. -.\" MOTOKI: 見やすいように .TP 形式に変更 -有効なタイプは以下の通りである: -.TP -.B SOCK_STREAM -ストリーム指向のソケット -.TP -.B SOCK_DGRAM -メッセージ境界を保存するデータグラム指向のソケット -(ほとんどの Unix の実装では、Unix ドメイン・データグラム・ソケットは -常に信頼でき、データグラムの並び替えは行わない) -.TP -.B SOCK_SEQPACKET -(Linux 2.6.4 以降で利用できる) -メッセージ境界を保存し、送信された順序でメッセージを届ける接続指向ソケット +有効なタイプを以下に示す。 \fBSOCK_STREAM\fP はストリーム指向のソケットである。 +\fBSOCK_DGRAM\fP はメッセージ境界を保存するデータグラム指向のソケットである +(ほとんどの UNIX の実装では、UNIX ドメイン・データグラム・ソケットは 常に +信頼でき、データグラムの並び替えは行わない)。 +\fBSOCK_SEQPACKET\fP はメッセージ境界を保存し、送信された順序でメッセージを +届ける接続指向ソケット である (Linux 2.6.4 以降で利用できる)。 -.\"O Unix sockets support passing file descriptors or process credentials -.\"O to other processes using ancillary data. -Unix ソケットでは、補助データを使って -ファイルディスクリプタやプロセスの信任状 (credential) を -送受信することもできる。 -.\"O .SS Address Format +UNIX ドメインソケットでは、補助データを使って ファイルディスクリプタや +プロセスの信任状 (credential) を 送受信することもできる。 .SS アドレスのフォーマット -.\"O A Unix domain socket address is represented in the following structure: -Unix ドメインソケットのアドレスは以下の構造体で表現される。 +UNIX ドメインソケットのアドレスは以下の構造体で表現される。 .in +4n .nf @@ -116,307 +58,85 @@ struct sockaddr_un { .fi .in .PP -.\"O .I sun_family -.\"O always contains -.\"O .BR AF_UNIX . -.I sun_family -には必ず -.B AF_UNIX -が入っている。 +\fIsun_family\fP には必ず \fBAF_UNIX\fP が入っている。 -.\"O Three types of address are distinguished in this structure: この構造体では 3 種類のアドレスが区別される。 .IP * 3 -.\"O .IR pathname : -.\"O a Unix domain socket can be bound to a null-terminated file -.\"O system pathname using -.\"O .BR bind (2). -.\"O When the address of the socket is returned by -.\"O .BR getsockname (2), -.\"O .BR getpeername (2), -.\"O and -.\"O .BR accept (2), -.\"O its length is -.\"O .IR "sizeof(sa_family_t) + strlen(sun_path) + 1" , -.\"O and -.\"O .I sun_path -.\"O contains the null-terminated pathname. -.IR "pathname (パス名)" : -.BR bind (2) -を使って、Unix ドメインソケットを NULL 終端されたファイルシステム上の -パス名に結び付けることができる。 -.BR getsockname (2), -.BR getpeername (2), -.BR accept (2) -がソケットのアドレスを返す際には、 -その長さは -.I "sizeof(sa_family_t) + strlen(sun_path) + 1" -であり、 -.I sun_path -に NULL 終端されたパス名が格納される。 +\fIpathname (パス名)\fP: \fBbind\fP(2) を使って、UNIX ドメインソケットを NULL 終端 +されたファイルシステム上の パス名に結び付けることができる。 +\fBgetsockname\fP(2), \fBgetpeername\fP(2), \fBaccept\fP(2) がソケットのアドレスを +返す際には、その長さは +\fIoffsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1\fP +であり、 \fIsun_path\fP に NULL 終端されたパス名が格納される。 .IP * -.\"O .IR unnamed : -.\"O A stream socket that has not been bound to a pathname using -.\"O .BR bind (2) -.\"O has no name. -.\"O Likewise, the two sockets created by -.\"O .BR socketpair (2) -.\"O are unnamed. -.\"O When the address of an unnamed socket is returned by -.\"O .BR getsockname (2), -.\"O .BR getpeername (2), -.\"O and -.\"O .BR accept (2), -.\"O its length is -.\"O .IR "sizeof(sa_family_t)" , -.\"O and -.\"O .I sun_path -.\"O should not be inspected. -.\"O .\" There is quite some variation across implementations: FreeBSD -.\"O .\" says the length is 16 bytes, HP-UX 11 says it's zero bytes. -.IR "unnamed (名前なし)" : -.BR bind (2) -を使ってパス名に結び付けることができないストリーム型のソケットは -名前を持たない。同様に、 -.BR socketpair (2) -で作成される 2 つのソケットも名前を持たない。 -.BR getsockname (2), -.BR getpeername (2), -.BR accept (2) -が名前なしのソケットのアドレスを返す際には、 -その長さは -.I "sizeof(sa_family_t)" -であり、 -.I sun_path -は検査すべきではない。 -.\" 実装ごとにかなりの違いが存在する。 -.\" FreeBSD では長さは 16 バイトとなり、HP-UX では長さは 0 バイトとなる。 +.\" There is quite some variation across implementations: FreeBSD +.\" says the length is 16 bytes, HP-UX 11 says it's zero bytes. +\fIunnamed (名前なし)\fP: \fBbind\fP(2) を使ってパス名に結び付けることができないストリーム型のソケットは 名前を持たない。同様に、 +\fBsocketpair\fP(2) で作成される 2 つのソケットも名前を持たない。 \fBgetsockname\fP(2), +\fBgetpeername\fP(2), \fBaccept\fP(2) が名前なしのソケットのアドレスを返す際には、 その長さは +\fIsizeof(sa_family_t)\fP であり、 \fIsun_path\fP は検査すべきではない。 .IP * -.\"O .IR abstract : -.\"O an abstract socket address is distinguished by the fact that -.\"O .IR sun_path[0] -.\"O is a null byte ('\\0'). -.\"O All of the remaining bytes in -.\"O .I sun_path -.\"O define the "name" of the socket. -.\"O (Null bytes in the name have no special significance.) -.\"O The name has no connection with file system pathnames. -.IR "abstract (抽象)" : -抽象ソケットアドレスは、 -.I sun_path[0] -がヌルバイト ('\\0') であることから区別できる。 -.I sun_path -の残りの全バイトによりソケットの「名前」が定義される -(名前中のヌルバイトには特別な意味はない)。 -この名前はファイルシステムのパス名とは何の関係もない。 -.\"O The socket's address in this namespace is given by the rest of the -.\"O bytes in -.\"O .IR sun_path . -.\"O When the address of an abstract socket is returned by -.\"O .BR getsockname (2), -.\"O .BR getpeername (2), -.\"O and -.\"O .BR accept (2), -.\"O its length is -.\"O .IR "sizeof(struct sockaddr_un)" , -.\"O and -.\"O .I sun_path -.\"O contains the abstract name. -.\"O The abstract socket namespace is a nonportable Linux extension. -この名前空間におけるソケットのアドレスは、 -.I sun_path -の残りのバイトで表される。 -.BR getsockname (2), -.BR getpeername (2), -.BR accept (2) -が抽象ソケットのアドレスを返す際には、その長さは -.I "sizeof(struct sockaddr_un)" -であり、 -.I sun_path -に抽象名前空間の名前が格納される。 +\fIabstract (抽象)\fP: 抽象ソケットアドレスは、 \fIsun_path[0]\fP が NULL バイト +(\(aq\e0\(aq) であることで区別される。この名前空間におけるソケットのアドレス +は、 \fIsun_path\fP の残りのバイトの、アドレス構造体の指定された長さの範囲で表さ +れる (名前中の NULL バイトには特別な意味はない)。この名前はファイルシステムの +パス名とは何の関係もない。 \fBgetsockname\fP(2), \fBgetpeername\fP(2), +\fBaccept\fP(2) が抽象ソケットのアドレスを返す際には、返される \fIaddrlen\fP は +\fIsizeof(sa_family_t)\fP より大きく (つまり 2 より大きく)、ソケットの名前は +\fIsun_path\fP の最初の \fI(addrlen \- sizeof(sa_family_t))\fP バイトに格納される。 ソケットの抽象名前空間は Linux による拡張であり、移植性はない。 -.\"O .SS Socket Options .SS ソケットオプション -.\"O For historical reasons these socket options are specified with a -.\"O .B SOL_SOCKET -.\"O type even though they are -.\"O .B AF_UNIX -.\"O specific. -.\"O They can be set with -.\"O .BR setsockopt (2) -.\"O and read with -.\"O .BR getsockopt (2) -.\"O by specifying -.\"O .B SOL_SOCKET -.\"O as the socket family. -歴史的な理由により、これらのオプションは -たとえ -.B AF_UNIX -固有のオプションであっても -.B SOL_SOCKET -型で指定する。 -ソケットファミリーとして -.B SOL_SOCKET -を指定すると、 -.BR setsockopt (2) -でオプションが設定でき、 -.BR getsockopt (2) -で取得ができる。 -.\" NAKANO added this TP -.TP -.B SO_PASSCRED -.\"O Enables the receiving of the credentials of the sending process -.\"O ancillary message. -.\"O When this option is set and the socket is not yet connected -.\"O a unique name in the abstract namespace will be generated automatically. -.\"O Expects an integer boolean flag. -送信プロセスの補助メッセージとして信任状を受信できるようにする。 -このオプションがセットされていて、まだソケットが接続されていないと、 -抽象名前空間に他と重ならない名前が自動的に生成される。 -ブール整数値のフラグを取る。 -.\"O .SS Sockets API -.SS ソケット API -.\"O The following paragraphs describe domain-specific details and -.\"O unsupported features of the sockets API for Unix domain sockets on Linux. -この節では、Linux の Unix ドメイン・ソケットでの、 -ドメイン固有の詳細仕様とソケット API でサポートされていない機能に -ついて説明する。 +歴史的な理由により、これらのオプションは たとえ \fBAF_UNIX\fP 固有のオプションであっても \fBSOL_SOCKET\fP 型で指定する。 +ソケットファミリーとして \fBSOL_SOCKET\fP を指定すると、 \fBsetsockopt\fP(2) でオプションが設定でき、 +\fBgetsockopt\fP(2) で取得ができる。 +.TP +\fBSO_PASSCRED\fP +送信プロセスの補助メッセージで信任状を受信できるようにする。このオプションが +セットされていて、まだソケットが接続されていないと、抽象名前空間に他と重なら +ない名前が自動的に生成される。ブール整数値のフラグを取る。 +.SS "自動バインド (autobind) 機能" +.\" i.e. sizeof(short) +\fBbind\fP(2) 呼び出しで \fIsizeof(sa_family_t)\fP として \fIaddrlen\fP を指定するか、 +アドレスに明示的にバインドされていないソケットに対して +\fBSO_PASSCRED\fP ソケットオプションが指定されていた場合、 +そのソケットは抽象アドレスに自動的にバインドされる。 +このアドレスは、1 個の NULL バイトの後に、文字集合 \fI[0\-9a\-f]\fP のバイトが +5 個続く形式である。したがって、自動的にバインドされるアドレス数には +2^20 個という上限が存在する。 +(Linux 2.1.15 以降で、自動バインド機能が追加されたときには、 +8 バイトが使われており、自動バインドアドレス数の上限は 2^32 であった。 +Linux 2.3.15 で 5 バイトに変更された。) +.SS "ソケット API" +この節では、Linux の UNIX ドメインソケットでの、ドメイン固有の詳細仕様と +ソケット API でサポートされていない機能について説明する。 -.\"O Unix domain sockets do not support the transmission of -.\"O out-of-band data (the -.\"O .B MSG_OOB -.\"O flag for -.\"O .BR send (2) -.\"O and -.\"O .BR recv (2)). -Unix ドメイン・ソケットでは、帯域外データ (out-of-band data) の -送信 -.RB ( send (2) -と -.BR recv (2) -の -.B MSG_OOB -フラグ) はサポートされていない。 +UNIX ドメインソケットでは、帯域外データ (out\-of\-band data) の 送信 +(\fBsend\fP(2) と \fBrecv\fP(2) の \fBMSG_OOB\fP フラグ) はサポートされていない。 -.\"O The -.\"O .BR send (2) -.\"O .B MSG_MORE -.\"O flag is not supported by Unix domain sockets. -.BR send (2) -.B MSG_MORE -フラグは Unix ドメイン・ソケットではサポートされていない。 +\fBsend\fP(2) \fBMSG_MORE\fP フラグは UNIX ドメインソケットではサポートされていない。 -.\"O The use of -.\"O .B MSG_TRUNC -.\"O in the -.\"O .I flags -.\"O argument of -.\"O .BR recv (2) -.\"O is not supported by Unix domain sockets. -.BR recv (2) -の -.I flags -引き数での -.B MSG_TRUNC -の使用は Unix ドメイン・ソケットではサポートされていない。 +\fBrecv\fP(2) の \fIflags\fP 引き数での \fBMSG_TRUNC\fP の使用は UNIX ドメイン +ソケットではサポートされていない。 -.\"O The -.\"O .B SO_SNDBUF -.\"O socket option does have an effect for Unix domain sockets, but the -.\"O .B SO_RCVBUF -.\"O option does not. -.\"O For datagram sockets, the -.\"O .B SO_SNDBUF -.\"O value imposes an upper limit on the size of outgoing datagrams. -.\"O This limit is calculated as the doubled (see -.\"O .BR socket (7)) -.\"O option value less 32 bytes used for overhead. -.B SO_SNDBUF -ソケットオプションは Unix ドメイン・ソケットで効果を持つが、 -.B SO_RCVBUF -は効果がない。 -データグラム・ソケットでは、 -.B SO_SNDBUF -の値が出力データグラムの上限サイズとなる。 -実際の上限値は、 -.B SO_SNDBUF -オプションとして設定された値の 2倍 -.RB ( socket (7) -参照) からオーバヘッドとして使用される 32 バイトを引いた値となる。 -.\"O .SS Ancillary Messages +\fBSO_SNDBUF\fP ソケットオプションは UNIX ドメインソケットで効果を持つが、 +\fBSO_RCVBUF\fP は効果がない。 データグラム・ソケットでは、 \fBSO_SNDBUF\fP の値が +出力データグラムの上限サイズとなる。 実際の上限値は、 \fBSO_SNDBUF\fP オプション +として設定された値の 2倍 (\fBsocket\fP(7) 参照) からオーバヘッドとして使用される +32 バイトを引いた値となる。 .SS 補助メッセージ -.\"O Ancillary data is sent and received using -.\"O .BR sendmsg (2) -.\"O and -.\"O .BR recvmsg (2). -補助データを送受するには、 -.BR sendmsg (2) -や -.BR recvmsg (2) -を使用する。 -.\"O For historical reasons the ancillary message types listed below -.\"O are specified with a -.\"O .B SOL_SOCKET -.\"O type even though they are -.\"O .B AF_UNIX -.\"O specific. -歴史的な理由により、以下に示す補助メッセージの型は -たとえ -.B AF_UNIX -固有のものであっても -.B SOL_SOCKET -型で指定する。 -.\"O To send them set the -.\"O .I cmsg_level -.\"O field of the struct -.\"O .I cmsghdr -.\"O to -.\"O .B SOL_SOCKET -.\"O and the -.\"O .I cmsg_type -.\"O field to the type. -.\"O For more information see -.\"O .BR cmsg (3). -これらを送るには、構造体 -.I cmsghdr -の -.I cmsg_level -フィールドに -.B SOL_SOCKET -をセットし、 -.I cmsg_type -フィールドにタイプをセットする。 -詳細は -.BR cmsg (3) -を見よ。 -.TP -.B SCM_RIGHTS -.\"O Send or receive a set of open file descriptors from another process. -.\"O The data portion contains an integer array of the file descriptors. -.\"O The passed file descriptors behave as though they have been created with -.\"O .BR dup (2). -他のプロセスでオープンされたファイルディスクリプタのセットを送受信する。 -データ部分にファイルディスクリプタの整数配列が入っている。 -渡されたファイルディスクリプタは、あたかも -.BR dup (2) -で生成されたかのように振る舞う。 -.TP -.B SCM_CREDENTIALS -.\"O Send or receive Unix credentials. -.\"O This can be used for authentication. -.\"O The credentials are passed as a -.\"O .I struct ucred -.\"O ancillary message. -.\"O Thus structure is defined in -.\"O .I -.\"O as follows: -Unix 信任状を送受信する。これは認証に用いることができる。 -信任状は、 -.I struct ucred -の補助メッセージとして渡される。 -この構造体は -.I -で以下のように定義されている。 +補助データを送受するには、 \fBsendmsg\fP(2) や \fBrecvmsg\fP(2) を使用する。 +歴史的な理由により、以下に示す補助メッセージの型は たとえ \fBAF_UNIX\fP 固有のものであっても \fBSOL_SOCKET\fP 型で指定する。 +これらを送るには、構造体 \fIcmsghdr\fP の \fIcmsg_level\fP フィールドに \fBSOL_SOCKET\fP をセットし、 +\fIcmsg_type\fP フィールドにタイプをセットする。 詳細は \fBcmsg\fP(3) を見よ。 +.TP +\fBSCM_RIGHTS\fP +他のプロセスでオープンされたファイルディスクリプタのセットを送受信する。 データ部分にファイルディスクリプタの整数配列が入っている。 +渡されたファイルディスクリプタは、あたかも \fBdup\fP(2) で生成されたかのように振る舞う。 +.TP +\fBSCM_CREDENTIALS\fP +UNIX 信任状を送受信する。これは認証に用いることができる。 +信任状は \fIstruct ucred\fP の補助メッセージとして渡される。 +この構造体は \fI\fP で以下のように定義されている。 .in +4n .nf @@ -428,247 +148,123 @@ struct ucred { .fi .in -.\"O Since glibc 2.8, the -.\"O .B _GNU_SOURCE -.\"O feature test macro must be defined in order to obtain the definition -.\"O of this structure. -glibc 2.8 以降では、この構造体の定義を得るためには機能検査マクロ -.B _GNU_SOURCE -を定義しなければならない。 +glibc 2.8 以降では、この構造体の定義を得るためには +(\fIどの\fPヘッダファイルをインクルードするよりも前に) +機能検査マクロ \fB_GNU_SOURCE\fP を定義しなければならない。 -.\"O The credentials which the sender specifies are checked by the kernel. -.\"O A process with effective user ID 0 is allowed to specify values that do -.\"O not match its own. -送信側が指定した信任状は、カーネルがチェックする。 -実効ユーザー ID が 0 のプロセスには、 -自分自身以外の値を指定する事が許される。 -.\"O The sender must specify its own process ID (unless it has the capability -.\"O .BR CAP_SYS_ADMIN ), -.\"O its user ID, effective user ID, or saved set-user-ID (unless it has -.\"O .BR CAP_SETUID ), -.\"O and its group ID, effective group ID, or saved set-group-ID -.\"O (unless it has -.\"O .BR CAP_SETGID ). -送信側は以下の 3 つを指定しなければならない。 -1) 自分自身のプロセス ID -.RB ( CAP_SYS_ADMIN -権限を持っていない場合)、 -2) 自分自身のユーザー ID あるいは実効ユーザー ID か保存 set-user-ID -.RB ( CAP_SETUID -権限を持っていない場合)、 -3) 自分自身のグループ ID あるいは実行グループ ID か保存 set-group-ID -.RB ( CAP_SETGID -を持っていない場合)。 -.\"O To receive a -.\"O .I struct ucred -.\"O message the -.\"O .B SO_PASSCRED -.\"O option must be enabled on the socket. -.I struct ucred -メッセージを受信するためには、ソケットに対し -.B SO_PASSCRED -オプションを有効にしなくてはならない。 -.\"O .SH ERRORS +送信側が指定した信任状は、カーネルがチェックする。 実効ユーザー ID が 0 のプロセスには、 自分自身以外の値を指定する事が許される。 +送信側は以下の 3 つを指定しなければならない。 1) 自分自身のプロセス ID (\fBCAP_SYS_ADMIN\fP 権限を持っていない場合)、 2) +自分自身のユーザー ID あるいは実効ユーザー ID か保存 set\-user\-ID (\fBCAP_SETUID\fP 権限を持っていない場合)、 3) +自分自身のグループ ID あるいは実行グループ ID か保存 set\-group\-ID (\fBCAP_SETGID\fP を持っていない場合)。 +\fIstruct ucred\fP メッセージを受信するためには、ソケットに対し \fBSO_PASSCRED\fP オプションを有効にしなくてはならない。 +.SS ioctl +以下の \fBioctl\fP(2) 呼び出しは \fIvalue\fP に情報を入れて返す。 +正しい書式は以下の通り。 +.PP +.RS +.nf +\fBint\fP\fI value\fP\fB;\fP +\fIerror\fP\fB = ioctl(\fP\fIunix_socket\fP\fB, \fP\fIioctl_type\fP\fB, &\fP\fIvalue\fP\fB);\fP +.fi +.RE +.PP +\fIioctl_type\fP には以下を指定できる: +.TP +\fBSIOCINQ\fP +.\" FIXME http://sources.redhat.com/bugzilla/show_bug.cgi?id=12002, +.\" filed 2010-09-10, may cause SIOCINQ to be defined in glibc headers +.\" SIOCOUTQ also has an effect for UNIX domain sockets, but not +.\" quite what userland might expect. It seems to return the number +.\" of bytes allocated for buffers containing pending output. +.\" That number is normally larger than the number of bytes of pending +.\" output. Since this info is, from userland's point of view, imprecise, +.\" and it may well change, probably best not to document this now. +受信バッファのキューにある、まだ読んでいないデータの量を返す。ソケットは +LISTEN 状態にあってはならず、さもないとエラー (\fBEINVAL\fP) が返る。 +\fBSIOCINQ\fP は \fI\fP で定義されている。 +代わりに、\fI\fP で定義されている、同義語の \fBFIONREAD\fP +を使うこともできる。 .SH エラー -.TP -.B EADDRINUSE -.\"O Selected local address is already taken or file system socket -.\"O object already exists. -選択したソケットが既に用いられていた。または、 -ファイルシステムのソケットオブジェクトが既に存在していた。 -.TP -.B ECONNREFUSED -.\"O .BR connect (2) -.\"O called with a socket object that isn't listening. -.\"O This can happen when -.\"O the remote socket does not exist or the filename is not a socket. -listen 状態にないソケットオブジェクトに対して -.BR connect (2) -が呼ばれた。リモートソケットが存在していなかった、 -ファイル名がソケットではなかった、などのときに起こる。 -.TP -.B ECONNRESET -.\"O Remote socket was unexpectedly closed. +.TP +\fBEADDRINUSE\fP +指定したローカルアドレスが既に使用されているか、ファイルシステムの +ソケットオブジェクトが既に存在している。 +.TP +\fBECONNREFUSED\fP +\fBconnect\fP(2) により指定されたリモートアドレスが接続待ちソケットではなかった。 +ターゲットアドレスがソケットではない場合にもこのエラーが発生する。 +.TP +\fBECONNRESET\fP リモートソケットが予期しないかたちでクローズされた。 -.TP -.B EFAULT -.\"O User memory address was not valid. +.TP +\fBEFAULT\fP ユーザーメモリアドレスが不正。 -.TP -.B EINVAL -.\"O Invalid argument passed. -.\"O A common cause is the missing setting of AF_UNIX -.\"O in the -.\"O .I sun_type -.\"O field of passed addresses or the socket being in an -.\"O invalid state for the applied operation. -渡した引数が不正。よくある原因は、 -渡したアドレスの -.I sun_type -フィールドに AF_UNIX を設定しなかった、 -行おうとした操作に対してソケットの状態が有効ではなかった、など。 -.TP -.B EISCONN -.\"O .BR connect (2) -.\"O called on an already connected socket or a target address was -.\"O specified on a connected socket. -既に接続されているソケットに対して -.BR connect (2) -が呼ばれた。または、指定したターゲットアドレスが -既に接続済みのソケットだった。 -.TP -.B ENOMEM -.\"O Out of memory. +.TP +\fBEINVAL\fP +渡した引数が不正。よくある原因としては、渡したアドレスの \fIsun_type\fP フィール +ドに \fBAF_UNIX\fP が指定されていなかった、行おうとした操作に対してソケットが有 +効な状態ではなかった、など。 +.TP +\fBEISCONN\fP +既に接続されているソケットに対して \fBconnect\fP(2) が呼ばれた。または、指定したターゲットアドレスが 既に接続済みのソケットだった。 +.TP +\fBENOENT\fP +\fBconnect\fP(2) に指定されたリモートアドレスのパス名が存在しなかった。 +.TP +\fBENOMEM\fP メモリが足りない。 -.TP -.B ENOTCONN -.\"O Socket operation needs a target address, but the socket is not connected. -ソケット操作にターゲットアドレスが必要だが、 -このソケットは接続されていない。 -.TP -.B EOPNOTSUPP -.\"O Stream operation called on non-stream oriented socket or tried to -.\"O use the out-of-band data option. -ストリーム指向でないソケットに対してストリーム操作が呼び出された。 -または帯域外データオプションを用いようとした。 -.TP -.B EPERM -.\"O The sender passed invalid credentials in the -.\"O .IR "struct ucred" . -送信者が -.I struct ucred -に不正な信任状を渡した。 -.TP -.B EPIPE -.\"O Remote socket was closed on a stream socket. -.\"O If enabled, a -.\"O .B SIGPIPE -.\"O is sent as well. -.\"O This can be avoided by passing the -.\"O .B MSG_NOSIGNAL -.\"O flag to -.\"O .BR sendmsg (2) -.\"O or -.\"O .BR recvmsg (2). -リモートソケットがストリームソケット上でクローズされた。 -可能な場合は -.B SIGPIPE -も同時に送られる。これを避けるには -.B MSG_NOSIGNAL -フラグを -.BR sendmsg (2) -や -.BR recvmsg (2) -に渡す。 -.TP -.B EPROTONOSUPPORT -.\"O Passed protocol is not AF_UNIX. -渡されたプロトコルが AF_UNIX でない。 -.TP -.B EPROTOTYPE -.\"O Remote socket does not match the local socket type -.\"O .RB ( SOCK_DGRAM -.\"O vs. -.\"O .BR SOCK_STREAM ) -リモートソケットとローカルソケットのタイプが一致していなかった -.RB ( SOCK_DGRAM -と -.BR SOCK_STREAM )。 -.TP -.B ESOCKTNOSUPPORT -.\"O Unknown socket type. +.TP +\fBENOTCONN\fP +ソケット操作にターゲットアドレスが必要だが、 このソケットは接続されていない。 +.TP +\fBEOPNOTSUPP\fP +ストリーム指向でないソケットに対してストリーム操作が呼び出された。 または帯域外データオプションを用いようとした。 +.TP +\fBEPERM\fP +送信者が \fIstruct ucred\fP に不正な信任状を渡した。 +.TP +\fBEPIPE\fP +リモートソケットがストリームソケット上でクローズされた。 可能な場合は \fBSIGPIPE\fP も同時に送られる。これを避けるには +\fBMSG_NOSIGNAL\fP フラグを \fBsendmsg\fP(2) や \fBrecvmsg\fP(2) に渡す。 +.TP +\fBEPROTONOSUPPORT\fP +渡されたプロトコルが \fBAF_UNIX\fP でない。 +.TP +\fBEPROTOTYPE\fP +リモートソケットとローカルソケットのタイプが一致していなかった (\fBSOCK_DGRAM\fP と \fBSOCK_STREAM\fP)。 +.TP +\fBESOCKTNOSUPPORT\fP 未知のソケットタイプ。 .PP -.\"O Other errors can be generated by the generic socket layer or -.\"O by the file system while generating a file system socket object. -.\"O See the appropriate manual pages for more information. -他にも汎用のソケット層でエラーが起こったり、 -ファイルシステム上にソケットオブジェクトを作ろうとした場合に -ファイルシステムのエラーが起こることがある。 +他にも汎用のソケット層でエラーが起こったり、 ファイルシステム上にソケットオブジェクトを作ろうとした場合に ファイルシステムのエラーが起こることがある。 それぞれの詳細は適切な man ページを参照すること。 -.\"O .SH VERSIONS .SH バージョン -.\"O .B SCM_CREDENTIALS -.\"O and the abstract namespace were introduced with Linux 2.2 and should not -.\"O be used in portable programs. -.B SCM_CREDENTIALS -と抽象名前空間は、Linux 2.2 で導入された。 -移植性が必要なプログラムでは使うべきではない。 -.\"O (Some BSD-derived systems also support credential passing, -.\"O but the implementation details differ.) -(BSD 由来のシステムの中にも信任状の送受信をサポートしているものがあるが、 -その実装の詳細はシステムによって異なる) -.\"O .SH NOTES +\fBSCM_CREDENTIALS\fP と抽象名前空間は、Linux 2.2 で導入された。 移植性が必要なプログラムでは使うべきではない。 (BSD +由来のシステムの中にも信任状の送受信をサポートしているものがあるが、 その実装の詳細はシステムによって異なる) .SH 注意 -.\"O In the Linux implementation, sockets which are visible in the -.\"O file system honor the permissions of the directory they are in. -.\"O Their owner, group and their permissions can be changed. -.\"O Creation of a new socket will fail if the process does not have write and -.\"O search (execute) permission on the directory the socket is created in. -.\"O Connecting to the socket object requires read/write permission. -.\"O This behavior differs from many BSD-derived systems which -.\"O ignore permissions for Unix sockets. -.\"O Portable programs should not rely on -.\"O this feature for security. -Linux の実装では、ファイルシステム上から見えるソケットは、 -それらが置かれているディレクトリのパーミッションに従う。 -ソケットの所有者、グループ、パーミッションは変更できる。 -新しいソケットを作るとき、作ろうとするディレクトリに対して -プロセスが書き込みと検索 (実行) 権限を持っていなければ、作成に失敗する。 -ソケットオブジェクトに接続するには、 read/write 権限が必要である。 -この動作は、多くの BSD 由来のシステムとは異なっている -(BSD では Unix ソケットに対してはパーミッションを無視する)。 -移植性の必要なプログラムでは、 -セキュリティをこの仕様に依存してはならない。 +Linux の実装では、ファイルシステム上から見えるソケットは、それらが置かれてい +るディレクトリのパーミッションに従う。ソケットの所有者、グループ、パーミッショ +ンは変更できる。新しいソケットを作るとき、作ろうとするディレクトリに対して プ +ロセスが書き込みと検索 (実行) 権限を持っていなければ、作成に失敗する。ソケッ +トオブジェクトに接続するには、 read/write 権限が必要である。この動作は、多く +の BSD 由来のシステムとは異なっている (BSD では UNIX ドメインソケットに対して +はパーミッションを無視する)。 移植性の必要なプログラムでは、セキュリティをこ +の仕様に依存してはならない。 -.\"O Binding to a socket with a filename creates a socket -.\"O in the file system that must be deleted by the caller when it is no -.\"O longer needed (using -.\"O .BR unlink (2)). -ファイル名を指定してソケットにバインドすると、 -ファイルシステムにソケットが生成される。 -これは必要なくなったときに呼びだしたユーザーが削除しなければならない -.RB ( unlink (2) -を用いる)。 -.\"O The usual Unix close-behind semantics apply; the socket can be unlinked -.\"O at any time and will be finally removed from the file system when the last -.\"O reference to it is closed. -Unix で通常使われる「背後で閉じる方式」が適用される。 -ソケットはいつでも unlink することができ、最後の参照が +ファイル名を指定してソケットにバインドすると、ファイルシステムにソケットが +生成される。これは必要なくなったときに呼びだしたユーザーが削除しなければ +ならない (\fBunlink\fP(2) を用いる)。 UNIX で通常使われる「背後で閉じる方式」 +が適用される。ソケットはいつでも unlink することができ、最後の参照が クローズされたときにファイルシステムから削除される。 -.\"O To pass file descriptors or credentials over a -.\"O .BR SOCK_STREAM , -.\"O you need -.\"O to send or receive at least one byte of nonancillary data in the same -.\"O .BR sendmsg (2) -.\"O or -.\"O .BR recvmsg (2) -.\"O call. -.B SOCK_STREAM -上でファイルディスクリプタや信任状を渡すためには、同じ -.BR sendmsg (2) -や -.BR recvmsg (2) -コールで補助データ以外のデータを少なくとも -1 バイト送信/受信する必要がある。 +\fBSOCK_STREAM\fP 上でファイルディスクリプタや信任状を渡すためには、同じ \fBsendmsg\fP(2) や \fBrecvmsg\fP(2) +コールで補助データ以外のデータを少なくとも 1 バイト送信/受信する必要がある。 -.\"O Unix domain stream sockets do not support the notion of out-of-band data. -Unix ドメインのストリーム・ソケットでは、 -帯域外データの概念はサポートされない。 -.\"O .SH EXAMPLE +UNIX ドメインのストリーム・ソケットでは、 帯域外データの概念はサポートされない。 .SH 例 -.\"O See -.\"O .BR bind (2). -.BR bind (2) -参照。 -.\"O .SH "SEE ALSO" +\fBbind\fP(2) 参照。 + +\fBSCM_RIGHTS\fP の使用例については \fBcmsg\fP(3) を参照。 .SH 関連項目 -.BR recvmsg (2), -.BR sendmsg (2), -.BR socket (2), -.BR socketpair (2), -.BR cmsg (3), -.BR capabilities (7), -.BR credentials (7), -.BR socket (7) +\fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBsocketpair\fP(2), \fBcmsg\fP(3), +\fBcapabilities\fP(7), \fBcredentials\fP(7), \fBsocket\fP(7)