OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man2 / socket.2
1 '\" t
2 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
3 .\" All rights reserved.
4 .\"
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 .\"
33 .\"     $Id: socket.2,v 1.4 1999/05/13 11:33:42 freitag Exp $
34 .\"
35 .\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
36 .\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
37 .\" Modified 1998, 1999 by Andi Kleen <ak@muc.de>
38 .\" Modified 2002-07-17 by Michael Kerrisk <mtk.manpages@gmail.com>
39 .\" Modified 2004-06-17 by Michael Kerrisk <mtk.manpages@gmail.com>
40 .\"
41 .\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
42 .\"         all rights reserved.
43 .\" Translated Mon Mar  3 23:40:11 JST 1997
44 .\"         by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
45 .\" Modified Sun Aug 15 23:52:28 JST 1999
46 .\"         by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
47 .\" Updated Mon Jan 13 JST 2000 by Kentaro Shirakata <argrath@ub32.org>
48 .\" Updated Mon Oct 15 JST 2001 by Kentaro Shirakata <argrath@ub32.org>
49 .\" Updated Mon Oct 26 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
50 .\" Updated 2008-11-09, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.13
51 .\"
52 .\"WORD:        endpoint                端点
53 .\"WORD:        descriptor              ディスクリプター
54 .\"WORD:        link layer              リンク層
55 .\"WORD:        byte stream             バイト・ストリーム
56 .\"WORD:        out-of-band             帯域外
57 .\"WORD:        sequenced               順序性のある
58 .\"WORD:        reliable                信頼性のある
59 .\"WORD:        two-way                 双方向の
60 .\"WORD:        datagram                データグラム
61 .\"WORD:        implement               実装
62 .\"WORD:        super-user              スーパー・ユーザー
63 .\"WORD:        full-duplex             全二重
64 .\"WORD:        non-blocking I/O        非停止 I/O
65 .\"WORD:        asynchronous            非同期
66 .\"
67 .TH SOCKET 2 2009-01-19 "Linux" "Linux Programmer's Manual"
68 .SH 名前
69 socket \- 通信のための端点(endpoint)を作成する
70 .SH 書式
71 .BR "#include <sys/types.h>" "          /* 「注意」参照 */"
72 .br
73 .B #include <sys/socket.h>
74 .sp
75 .BI "int socket(int " domain ", int " type ", int " protocol );
76 .SH 説明
77 .BR socket ()
78 は通信のための端点(endpoint)を作成し、ディスクリプター(descriptor)を返す。
79 .PP
80 .I domain
81 引数は通信を行なうドメインを指定する; これはどの
82 プロトコル・ファミリ(protocol family)を通信に使用するかを指定する。
83 これらのファミリは
84 .I <sys/socket.h>
85 に定義されている。
86 現在、理解できるフォーマットは以下の通り。
87 .TS
88 tab(:);
89 l l l.
90 名前:目的:マニュアル
91 T{
92 .BR AF_UNIX ", " AF_LOCAL
93 T}:T{
94 ローカル通信
95 T}:T{
96 .BR unix (7)
97 T}
98 T{
99 .B AF_INET
100 T}:IPv4 インターネット・プロトコル:T{
101 .BR ip (7)
102 T}
103 T{
104 .B AF_INET6
105 T}:IPv6 インターネット・プロトコル:T{
106 .BR ipv6 (7)
107 T}
108 T{
109 .B AF_IPX
110 T}:IPX \- Novell プロトコル:
111 T{
112 .B AF_NETLINK
113 T}:T{
114 カーネル・ユーザ・デバイス
115 T}:T{
116 .BR netlink (7)
117 T}
118 T{
119 .B AF_X25
120 T}:ITU-T X.25 / ISO-8208 プロトコル:T{
121 .BR x25 (7)
122 T}
123 T{
124 .B AF_AX25
125 T}:T{
126 アマチュア無線 AX.25 プロトコル
127 T}:
128 T{
129 .B AF_ATMPVC
130 T}:生の ATM PVC にアクセスする:
131 T{
132 .B AF_APPLETALK
133 T}:アップルトーク:T{
134 .BR ddp (7)
135 T}
136 T{
137 .B AF_PACKET
138 T}:T{
139 低レベルのパケットインターフェース
140 T}:T{
141 .BR packet (7)
142 T}
143 .TE
144 .PP
145 ソケットは
146 .I type
147 で指定される型を持ち、それは通信方式(semantics)を指定する。
148 定義されている型は現在以下の通り。
149 .TP 16
150 .B SOCK_STREAM
151 順序性と信頼性があり、双方向の、接続された
152 バイト・ストリーム(byte stream)を提供する。
153 帯域外(out-of-band)データ転送メカニズムもサポートされる。
154 .TP
155 .B SOCK_DGRAM
156 データグラム(接続、信頼性無し、固定最大長メッセージ)
157 をサポートする。
158 .TP
159 .B SOCK_SEQPACKET
160 固定最大長のデータグラム転送パスに基づいた順序性、信頼性のある
161 双方向の接続に基づいた通信を提供する。受け取り側ではそれぞれの入力
162 システム・コールでパケット全体を読み取ることが要求される。
163 .TP
164 .B SOCK_RAW
165 生のネットワーク・プロトコルへのアクセスを提供する。
166 .TP
167 .B SOCK_RDM
168 信頼性はあるが、順序は保証しないデータグラム層を提供する。
169 .TP
170 .B SOCK_PACKET
171 廃止されており新しいプログラムで使用してはいけない。
172 .BR packet (7)
173 を参照すること
174 .PP
175 ある種のソケット型が全てのプロトコル・ファミリで実装されているわけではない。
176 例えば
177 .B SOCK_SEQPACKET
178
179 .B AF_INET
180 には実装されていない。
181 .PP
182 Linux 2.6.27 以降では、
183 .I type
184 引数は二つ目の目的にも使用される。
185 ソケットの型を指定するのに加えて、
186 以下の値のいくつかをビット単位の論理和 (OR) で指定することで、
187 .BR socket ()
188 の振舞いを変更することができる。
189 .TP 16
190 .B SOCK_NONBLOCK
191 新しく生成されるオープンファイル記述 (open file description) の
192 .B O_NONBLOCK
193 ファイルステータスフラグをセットする。
194 このフラグを使うことで、
195 .B O_NONBLOCK
196 をセットするために
197 .BR fcntl (2)
198 を追加で呼び出す必要がなくなる。
199 .TP
200 .B SOCK_CLOEXEC
201 新しいファイル・ディスクリプターに対して
202 close-on-exec
203 .RB ( FD_CLOEXEC )
204 フラグをセットする。
205 このフラグが役に立つ理由については、
206 .BR open (2)
207
208 .B O_CLOEXEC
209 フラグの説明を参照のこと。
210 .PP
211 .I protocol
212 はソケットによって使用される固有のプロトコルを指定する。通常それぞれの
213 ソケットは、与えられたプロトコル・ファミリの種類ごとに一つのプロトコルのみを
214 サポートする。
215 その場合は
216 .I protocol
217 に 0 を指定できる。
218 しかし、多くのプロトコルが存在してもかまわない。
219 この場合にはこの方法により固有のプロトコルを指定する必要がある。
220 使用されるプロトコル番号は通信の行なわれる\*(lq通信ドメイン\*(rqに
221 固有である;
222 .BR protocols (5)
223 を参照すること。
224 プロトコル名をどうやってプロトコル番号に対応させるかについては
225 .BR getprotoent (3)
226 を参照すること。
227 .PP
228 .B SOCK_STREAM
229 型のソケットはパイプのような全二重バイト・ストリームである。
230 これらはレコード境界を保存しない。
231 ストリームは、ソケットがデータを送ったり受けたりする前に
232 .I 接続された
233 状態になってなければならない。他のソケットへの接続は
234 .BR connect (2)
235 コールによって行なわれる。一度接続したらデータは
236 .BR read (2)
237
238 .BR write (2)
239 コールや
240 .BR send (2)
241
242 .BR recv (2)
243 コールの変種を使用して転送できる。
244 セッションが完了したら
245 .BR close (2)
246 が行なわれる。帯域外データの転送も
247 .BR send (2)
248 に記述されており、
249 受信も
250 .BR recv (2)
251 に記述されている。
252 .PP
253 .B SOCK_STREAM
254 を実装した通信プロトコルはデータに損失や重複がないことを保証する。
255 もし相手のプロトコルがバッファー空間を持つ
256 データの断片を適当な時間のうちに転送できなければ、
257 接続は断たれたとみなす。そのソケット
258 .B SO_KEEPALIVE
259 が有効になっている場合、プロトコル独自の方法で接続の相手側がまだ
260 有効であるかをチェックする。
261 もしプロセスが、壊れたストリームでデータを送受信しようとした場合には
262 .B SIGPIPE
263 シグナルが送られる; これは通常のそのシグナルを扱っていないプロセスを
264 終了させる。
265 .B SOCK_SEQPACKET
266 ソケットは
267 .B SOCK_STREAM
268 ソケットと同じシステム・コールを使用する。
269 唯一の違いは
270 .BR read (2)
271 コールが要求された量のデータのみを返し、到着したパケットの残りの部分を
272 捨ててしまうことである。同様に入ってくるデータグラムの全てのメッセージ境界は
273 保存される。
274 .PP
275 .B SOCK_DGRAM
276
277 .B SOCK_RAW
278 ソケットは
279 .BR sendto (2)
280 コールで指定された相手へデータグラムを送ることが許されている。
281 データグラムは一般に
282 .BR recvfrom (2)
283 で受けとり、
284 このコールは次のデータグラムを送信者のアドレスと一緒に返す。
285 .PP
286 .B SOCK_PACKET
287 は古いソケット型で、生(raw)のパケットをデバイスドライバから
288 直接受信するためのものである。
289 今は代わりに
290 .BR packet (7)
291 を用いること。
292 .PP
293 .BR fcntl (2)
294
295 .B F_SETOWN
296 操作を使って、シグナル
297 .B SIGURG
298
299 .B SIGPIPE
300 を受けとるプロセス・グループを指定できる。
301 .B SIGURG
302 シグナルは帯域外データが到着した時に、
303 .B SIGPIPE
304 シグナルは
305 .B SOCK_STREAM
306 接続が予期せず切断された時に送られる。
307 また、
308 .B F_SETOWN
309 操作は、I/O や I/O イベントの非同期 (asynchronous) 通知を
310 .B SIGIO
311 を経由で受け取るプロセスやプロセス・グループを設定するのにも使用できる。
312 .B F_SETOWN
313 を使用することは
314 .B FIOSETOWN
315 または
316 .B SIOCSPGRP
317 の引数で
318 .BR ioctl (2)
319 を使用することと等価である。
320 .PP
321 ネットワークがプロトコル・モジュールにエラー状態を伝えた場合
322 (例えば、IP の ICMP メッセージを使用して)には、ソケットの
323 ペンディング・エラー・フラグが設定される。次にこのソケットを操作した
324 時にペンディングされていたエラー・コードが返される。プロトコルによっては
325 エラーについてのより詳しい情報を受け取るためにソケットごとのエラー・キューを
326 受け取ることが可能である。
327 .BR ip (7)
328
329 .B IP_RECVERR
330 を参照すること。
331 .PP
332 ソケットの操作はソケット・レベル
333 .I options
334 によって制御される。
335 これらのオプションは
336 .I <sys/socket.h>
337 に定義されている。
338 .BR setsockopt (2)
339
340 .BR getsockopt (2)
341 関数はそれぞれオプションの設定と取得を行なう。
342 .SH 返り値
343 成功した場合、新しいソケットのファイル・ディスクリプターを返す。
344 エラーが発生した場合は \-1 を返し、
345 .I errno
346 を適切に設定する。
347 .SH エラー
348 .TP
349 .B EACCES
350 指定されたタイプまたはプロトコルのソケットを作成する許可が与えられていない。
351 .TP
352 .B EAFNOSUPPORT
353 指定されたアドレスファミリーがサポートされていない。
354 .TP
355 .B EINVAL
356 知らないプロトコル、または利用できないプロトコル・ファミリである。
357 .TP
358 .B EINVAL
359 .\" Since Linux 2.6.27
360 .I type
361 に無効なフラグが指定されている。
362 .TP
363 .B EMFILE
364 プロセスのファイルテーブルが溢れている。
365 .TP
366 .B ENFILE
367 オープンされたファイルの総数がシステム上限に達している。
368 .TP
369 .BR ENOBUFS " または " ENOMEM
370 十分なメモリがない。十分な資源が解放されるまではソケットを
371 作成することはできない。
372 .TP
373 .B EPROTONOSUPPORT
374 このドメインでは指定されたプロトコルまたはプロトコル・タイプが
375 サポートされていない。
376 .PP
377 下位のプロトコル・モジュールから他のエラーが生成されるかもしれない。
378 .SH 準拠
379 4.4BSD, POSIX.1-2001.
380
381 フラグ
382 .BR SOCK_NONBLOCK ,
383 .B SOCK_CLOEXEC
384 は Linux 固有である。
385
386 .BR socket ()
387 は 4.2BSD で登場した。一般に、(System V の変種を含めて)
388 BSD のソケット層の互換性をサポートしている BSD 以外のシステムへの、
389 または、BSD 以外のシステムからの移植ができる。
390 .SH 注意
391 POSIX.1-2001 では
392 .I <sys/types.h>
393 のインクルードは必須とされておらず、
394 Linux ではこのヘッダファイルは必要ではない。
395 しかし、歴史的には、いくつかの実装 (BSD 系) でこのヘッダファイルが
396 必要であり、移植性が必要なアプリケーションではこのファイルを
397 インクルードするのが賢明であろう。
398
399 4.x BSD において定数を使用する場合、プロトコル・ファミリーには
400 .BR PF_UNIX ,
401 .B PF_INET
402 等を使用している。一方でアドレス・ファミリーには
403 .B AF_UNIX
404 等が使用されている。しかしながら BSD のマニュアルでは
405 「一般にプロトコル・ファミリーはアドレス・ファミリーと同じものである。」
406 と保証している。それでそれ以外の規格では全ての場所で AF_* が使用されている。
407 .SH 例
408 .BR socket ()
409 の利用例が
410 .BR getaddrinfo (3)
411 に記載されている。
412 .SH 関連項目
413 .BR accept (2),
414 .BR bind (2),
415 .BR connect (2),
416 .BR fcntl (2),
417 .BR getpeername (2),
418 .BR getsockname (2),
419 .BR getsockopt (2),
420 .BR ioctl (2),
421 .BR listen (2),
422 .BR read (2),
423 .BR recv (2),
424 .BR select (2),
425 .BR send (2),
426 .BR shutdown (2),
427 .BR socketpair (2),
428 .BR write (2),
429 .BR getprotoent (3),
430 .BR ip (7),
431 .BR socket (7),
432 .BR tcp (7),
433 .BR udp (7),
434 .BR unix (7)
435 .PP
436 \(lqAn Introductory 4.3BSD Interprocess Communication Tutorial\(rq
437
438 .I UNIX Programmer's Supplementary Documents Volume 1
439 として再版された。
440 .PP
441 \(lqBSD Interprocess Communication Tutorial\(rq
442
443 .I UNIX Programmer's Supplementary Documents Volume 1
444 として再版された。