OSDN Git Service

Convert release and draft pages to UTF-8.
[linuxjm/jm.git] / manual / LDP_man-pages / release / man7 / socket.7
1 '\" t
2 .\" Don't change the first line, it tells man that we need tbl.
3 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
4 .\" and copyright (c) 1999 Matthew Wilcox.
5 .\" Permission is granted to distribute possibly modified copies
6 .\" of this page provided the header is included verbatim,
7 .\" and in case of nontrivial modification author and date
8 .\" of the modification is added to the header.
9 .\"
10 .\" 2002-10-30, Michael Kerrisk, <mtk.manpages@gmail.com>
11 .\"     Added description of SO_ACCEPTCONN
12 .\" 2004-05-20, aeb, added SO_RCVTIMEO/SO_SNDTIMEO text.
13 .\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
14 .\"     Added notes on capability requirements
15 .\"     A few small grammar fixes
16 .\" FIXME
17 .\" The following are not yet documented:
18 .\"     SO_PEERNAME
19 .\"     SO_TIMESTAMPNS
20 .\"     SO_MARK
21 .\"     SO_TIMESTAMPING
22 .\"     SO_PROTOCOL (2.6.32)
23 .\"     SO_DOMAIN (2.6.32)
24 .\"     SO_RXQ_OVFL (2.6.33)
25 .\"
26 .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved.
27 .\" Translated 1999-12-06, NAKANO Takeo <nakano@apm.seikei.ac.jp>
28 .\" Updated 2003-01-20, Akihiro Motoki <amotoki@dd.iij4u.or.jp>
29 .\" Updated 2005-02-23, Akihiro MOTOKI
30 .\" Updated 2005-10-05, Akihiro MOTOKI
31 .\" Updated 2005-12-05, Akihiro MOTOKI, Catch up to LDP man-pages 2.16
32 .\" Updated 2005-12-26, Akihiro MOTOKI, Catch up to LDP man-pages 2.18
33 .\" Updated 2006-04-15, Akihiro MOTOKI, Catch up to LDP man-pages 2.29
34 .\" Updated 2007-01-05, Akihiro MOTOKI, Catch up to LDP man-pages 2.43
35 .\"
36 .\"WORD         protocol family         プロトコルファミリー
37 .\"WORD         socket type             ソケットタイプ
38 .\"WORD         file descriptor         ファイルディスクリプタ
39 .\"WORD         anonymous socket        名前無しソケット
40 .\"WORD         asynchronous            非同期 (的)
41 .\"WORD         credential              信任状
42 .\"WORD         capability              権限
43 .\"WORD         ancillary data          補助データ
44 .\"
45 .TH SOCKET 7 2008-12-03 Linux "Linux Programmer's Manual"
46 .SH 名前
47 socket \- Linux のソケットインターフェース
48 .SH 書式
49 .B #include <sys/socket.h>
50 .sp
51 .IB sockfd " = socket(int " socket_family ", int " socket_type ", int " protocol );
52 .SH 説明
53 このマニュアルページは Linux ネットワークのソケット層に対する
54 ユーザインターフェースを記述するものである。
55 BSD 互換ソケットは、ユーザプロセスとカーネル内部の
56 ネットワークプロトコルスタック群との間に、
57 統一的なインターフェースを提供するものである。
58 プロトコルモジュールは
59 .I "プロトコルファミリー (protocol familiy)"
60 (例:
61 .BR AF_INET ", " AF_IPX ", " AF_PACKET )
62
63 .I "ソケットタイプ (socket types)"
64 (例:
65 .BR SOCK_STREAM ", " SOCK_DGRAM )
66 に分類できる。
67 これらに関するより詳しい情報は
68 .BR socket (2)
69 を参照のこと。
70 .SS ソケット層の関数群
71 これらの関数はユーザプロセスがパケットを送受信したり、その他のソケット操作を
72 行ったりするために用いられる。詳細はそれぞれのマニュアルページを
73 見てほしい。
74
75 .BR socket (2)
76 はソケットを生成する。
77 .BR connect (2)
78 はソケットをリモートのソケットアドレスに接続する。
79 .BR bind (2)
80 はソケットをローカルのソケットアドレスにバインドする。
81 .BR listen (2)
82 はソケットに新しい接続が来たら受信するように伝え、
83 .BR accept (2)
84 は外部からやってきた接続に対して新しいソケットを得るために用いられる。
85 .BR socketpair (2)
86 は互いに接続された二つの名前無しソケット (anonymous socket) を返す
87 .RB ( AF_UNIX
88 のような、いくつかのローカルなファミリーでしか実装されていない)。
89 .PP
90 .BR send (2),
91 .BR sendto (2),
92 .BR sendmsg (2)
93 はソケットを通してデータを送信し、
94 .BR recv (2)
95 .BR recvfrom (2),
96 .BR recvmsg (2)
97 はソケットからデータを受信する。
98 .BR poll (2)
99
100 .BR select (2)
101 はデータの到着を待ったり、データ送信の準備ができるまで待ったりする。
102 さらに、
103 .BR write (2),
104 .BR writev (2),
105 .BR sendfile (2),
106 .BR read (2),
107 .BR readv (2)
108 のような標準的な I/O 操作もデータの読み書きに用いることができる。
109 .PP
110 .BR getsockbyname (2)
111 はローカルのソケットアドレスを返し、
112 .BR getpeername (2)
113 はリモートのソケットアドレスを返す。
114 .BR getsockopt (2)
115
116 .BR setsockopt (2)
117 はソケット層のオプションやプロトコルオプションの取得・設定に用いられる。
118 他のいくつかのオプションの取得・設定には
119 .BR ioctl (2)
120 を使うことができる。
121 .PP
122 .BR close (2)
123 はソケットをクローズする。
124 .BR shutdown (2)
125 は全二重なソケット接続を部分的にクローズする。
126 .PP
127 シーク動作や、 0 以外の位置に対する
128 .BR pread (2)
129
130 .BR pwrite (2)
131 はソケットではサポートされていない。
132 .PP
133 非ブロッキングな I/O をソケットで行うことは可能で、
134 .BR fcntl (2)
135 を使ってソケットのファイルディスクリプタに
136 .B O_NONBLOCK
137 フラグをセットすれば良い。
138 こうするとブロックされる操作は、 (通常)
139 .B EAGAIN
140 エラーで戻ることになる
141 (後で処理が再試行されることが期待されている)。
142 .BR connect (2)
143 では
144 .B EINPROGRESS
145 エラーが返される。
146 この場合、ユーザはさまざまなイベントを
147 .BR poll (2)
148
149 .BR select (2)
150 を使って待つことができる。
151 .TS
152 tab(:) allbox;
153 c s s
154 l l l.
155 I/O イベント
156 イベント:poll フラグ:内容
157 Read:POLLIN:T{
158 新しいデータが到着した。
159 T}
160 Read:POLLIN:T{
161 (接続志向のソケットで)
162 接続の設定が終了した。
163 T}
164 Read:POLLHUP:T{
165 接続先で切断要求が生成された。
166 T}
167 Read:POLLHUP:T{
168 接続が壊れた (接続志向のプロトコルのみ)。
169 この場合、ソケットに書き込みが行われると
170 .B SIGPIPE
171 も送信される。
172 T}
173 Write:POLLOUT:T{
174 ソケットには新しいデータを書き込むのに
175 充分なバッファ領域がある。
176 T}
177 Read/Write:T{
178 POLLIN|
179 .br
180 POLLOUT
181 T}:T{
182 外部向けの
183 .BR connect (2)
184 が終了した。
185 T}
186 Read/Write:POLLERR:T{
187 非同期的 (asynchronous) なエラーが起こった。
188 T}
189 Read/Write:POLLHUP:接続先が片方向を切断した。
190 Exception:POLLPRI:T{
191 緊急データ (urgent data) が到着した。
192 この場合は
193 .B SIGURG
194 が送信される。
195 T}
196 .\" FIXME . The following is not true currently:
197 .\" It is no I/O event when the connection
198 .\" is broken from the local end using
199 .\" .BR shutdown (2)
200 .\" or
201 .\" .BR close (2).
202 .TE
203
204 .PP
205 .BR poll (2)
206
207 .BR select (2)
208 を使う代わりに、カーネルからアプリケーションに
209 イベントを通知させるのに
210 .B SIGIO
211 シグナルを使う方法もある。
212 この方法を使うには、
213 .BR fcntl (2)
214 を用いてソケットのファイルディスクリプタに
215 .B O_ASYNC
216 フラグをセットし、
217 .B SIGIO
218 に対する有効なシグナルハンドラを
219 .BR sigaction (2)
220 によって設定しておく必要がある。
221 後述の
222 .I シグナル
223 に関する議論も参考にすること。
224 .SS ソケットオプション
225 これらのソケットオプションは、
226 .BR setsockopt (2)
227 を用いれば設定でき、
228 .BR getsockopt (2)
229 を用いれば取得できる。
230 但し、どのソケットの場合も
231 ソケットレベルには
232 .B SOL_SOCKET
233 を指定すること。
234 .\" SO_ACCEPTCONN は POSIX.1-2001 で定義されており、元は
235 .\" W R Stevens の UNPv1 に書かれていた。
236 .TP
237 .B SO_ACCEPTCONN
238 このソケットが
239 .BR listen (2)
240 によって接続待ち受け状態に設定されているかどうかを示す値を返す。
241 値 0 は listen 状態のソケットでないことを、
242 値 1 は listen 状態のソケットであることを示す。
243 .BR getsockopt (2)
244 からのみ読み出し可能である。
245 .TP
246 .B SO_BINDTODEVICE
247 このソケットを、引き数で渡したインターフェース名で指定される
248 (\(lqeth0\(rq のような) 特定のデバイスにバインドする。
249 名前が空文字列だったり、オプションの長さ (optlen) が 0 の場合には、
250 ソケットのバインドが削除される。渡すオプションは、インターフェース名が
251 入ったヌル文字で終端された可変長の文字列である。
252 文字列の最大のサイズは
253 .B IFNAMSIX
254 である。
255 ソケットがインターフェースにバインドされると、
256 その特定のインターフェースから受信されたパケットだけを処理する。
257 このオプションはいくつかのソケットタイプ、特に
258 .B AF_INET
259 に対してのみ動作する点に注意すること。
260 パケットソケットではサポートされていない (通常の
261 .BR bind (8)
262 を使うこと)。
263 .TP
264 .B SO_BROADCAST
265 ブロードキャストフラグを設定・取得する。有効になっていると、
266 データグラムソケットはブロードキャストアドレスに送られたパケットを受信したり、
267 ブロードキャストアドレスにパケットを送信したりできるようになる。
268 ストリーム指向のソケットには何の効果もない。
269 .TP
270 .B SO_BSDCOMPAT
271 BSD のバグに対して互換性を取るための機能を有効にする。
272 この機能は Linux 2.0 と 2.2 の UDP プロトコルモジュールで使用されている。
273 有効になっていると、 UDP ソケットで受信された ICMP エラーは
274 ユーザプログラムに渡されない。
275 これ以降のバージョンのカーネルでは、このオプションのサポートは
276 段階的に廃止されてきた。
277 Linux 2.4 ではこのオプションは黙って無視され、
278 Linux 2.6 ではプログラムがこのオプションを使用すると (printk() を使って)
279 カーネルの警告メッセージが出力される。
280 Linux 2.0 では、このオプションを指定すると、
281 raw ソケットにおいても BSD のバグ (ランダムヘッダ変更、
282 ブロードキャストフラグのスキップ)
283 に対する互換機能が有効になっていた。
284 しかし、こちらは Linux 2.2 で削除された。
285 .TP
286 .B SO_DEBUG
287 ソケットのデバッグ機能を有効にする。
288 .B CAP_NET_ADMIN
289 権限を持つプロセスか、実効ユーザ ID が 0 のプロセスでしか
290 利用できない。
291 .TP
292 .B SO_ERROR
293 保留になっていたソケットエラーを取得してクリアする。
294 .BR getsockopt (2)
295 でのみ用いることができる。
296 整数値をとる。
297 .TP
298 .B SO_DONTROUTE
299 ゲートウェイを経由せず、直接接続されているホストに送信する。
300 .BR send (2)
301 操作で
302 .B MSG_DONTROUTE
303 フラグをセットした場合も同じ効果が得られる。
304 ブール整数のフラグを取る。
305 .TP
306 .B SO_KEEPALIVE
307 接続志向のソケットに対する keep-alive メッセージの送信を有効にする。
308 ブール値の整数フラグをとる。
309 .TP
310 .B SO_LINGER
311 .B SO_LINGER
312 オプションを取得・設定する。引き数には
313 .I linger
314 構造体を取る。
315 .sp
316 .in +4n
317 .nf
318 struct linger {
319     int l_onoff;    /* linger active */
320     int l_linger;   /* how many seconds to linger for */
321 };
322 .fi
323 .in
324 .IP
325 有効になっていると、
326 .BR close (2)
327
328 .BR shutdown (2)
329 は、そのソケットにキューイングされたメッセージがすべて送信完了するか、
330 linger (居残り) タイムアウトになるまで返らない。無効になっていると、
331 これらのコールはただちに戻り、クローズ動作はバックグラウンドで行われる。
332 ソケットのクローズを
333 .BR exit (2)
334 の一部として行った場合には、残っているソケットの
335 クローズ動作は必ずバックグラウンドに送られる。
336 .TP
337 .B SO_OOBINLINE
338 このオプションを有効にすると、帯域外データ (out-of-band data) は
339 受信データストリーム中に置かれる。有効にしなければ、
340 帯域外データは受信時に
341 .B MSG_OOB
342 フラグがセットされている場合に限って渡される。
343 .\" あまりに危険なことができるので、このオプションについては記載しないこと。
344 .\".B SO_NO_CHECK
345 .TP
346 .B SO_PASSCRED
347 .B SCM_CREDENTIALS
348 制御メッセージの受信を有効/無効にする。詳細は
349 .BR unix (7)
350 を参照のこと。
351 .\" FIXME Document SO_PASSSEC, added in 2.6.18; there is some info
352 .\" in the 2.6.18 ChangeLog
353 .TP
354 .B SO_PEERCRED
355 このソケットに接続してきた外部プロセスの信任状 (credential) を返す。
356 このソケットオプションが利用できるのは、
357 接続された
358 .B AF_UNIX
359 ストリームソケット間、および
360 .BR socketpair (2)
361 を使って作成された
362 .B AF_UNIX
363 のストリームソケットとデータグラムソケットのペアだけである。
364 .BR unix (7)
365 を参照のこと。
366 .BR connect (2)
367
368 .BR socketpair (2)
369 が呼ばれた時に有効であった信任状が返される。
370 引き数は
371 .I ucred
372 構造体である。
373 .BR getsockopt (2)
374 でのみ用いることができる。
375 .TP
376 .B SO_PRIORITY
377 プロトコルで定義された優先度を、このソケットから
378 送信される全てのパケットにセットする。 Linux はネットワークキュー内部の
379 整列にこの値を用いる。高い優先度を持っているパケットは先に処理される。
380 ただしそのデバイスのキュー処理のやり方に依存する。
381 .BR ip (7)
382 では、外向けパケットの IP type-of-service (TOS) フィールドにもこの値が設定される。
383 0 から 6 以外の優先度をセットするには
384 .B CAP_NET_ADMIN
385 ケーパビリティが必要である。
386 .TP
387 .B SO_RCVBUF
388 ソケットの受信バッファの最大サイズを設定・取得する (バイト単位)。
389 .BR setsockopt (2)
390 を使って値が設定されたときに (管理オーバヘッド用の領域を確保するために)
391 カーネルはこの値を 2倍し、
392 .\" 他のほとんどの (全ての?) 実装ではこんなことは行っていない -- MTK, Dec 05
393 .BR getsockopt (2)
394 はこの 2倍された値を返す。
395 デフォルトの値は
396 .I /proc/sys/net/core/rmem_default
397 ファイルで設定され、許容される最大の値は
398 .I /proc/sys/net/core/rmem_max
399 ファイルで設定される。
400 このオプションの最小値は (2倍した値で) 256 である。
401 .TP
402 .BR SO_RCVBUFFORCE " (Linux 2.6.14 以降)"
403 このソケットオプションを使うと、特権プロセス
404 .RB ( CAP_NET_ADMIN
405 を持つプロセス) は
406 .B SO_RCVBUF
407 と同じことを実行できる。
408 ただし、上限
409 .I rmem_max
410 を上書きすることができる。
411 .TP
412 .BR SO_RCVLOWAT " と " SO_SNDLOWAT
413 バッファ中に溜めることのできるデータの最小値を指定する。
414 このサイズを越えると、ソケット層はそのデータをプロトコルに渡し
415 .RB ( SO_SNDLOWAT )、
416 受信時にはユーザに渡す
417 .RB ( SO_RCVLOWAT )。
418 これら二つの値は 1 に初期化される。
419 .B SO_SNDLOWAT
420 は Linux では変更できない
421 .RB ( setsockopt (2)
422
423 .B ENOPROTOOPT
424 エラーで失敗する)。
425 .B SO_RCVLOWAT
426 は Linux 2.4 以降でのみ変更可能である。
427 現状、Linux ではシステムコール
428 .BR select (2)
429
430 .BR poll (2)
431
432 .B SO_RCVLOWAT
433 の設定を考慮に入れずに動作し、
434 データが1バイト利用可能になっただけでも、
435 ソケットは読み出し可能とのマークをつける。
436 一方、それに続けて行うソケットからの read は
437 .B SO_RCVLOWAT
438 バイトのデータが利用可能になるまで停止してしまう。
439 .\" See http://marc.theaimsgroup.com/?l=linux-kernel&m=111049368106984&w=2
440 .\" Tested on kernel 2.6.14 -- mtk, 30 Nov 05
441 .TP
442 .BR SO_RCVTIMEO " と " SO_SNDTIMEO
443 .\" 2.0 では実装されていない。
444 .\" getsockopt については 2.1.11 で実装された。常に 0 の構造体を返す。
445 .\" setsockopt については 2.3.41 で実装され、実際に使われている。
446 送信・受信のタイムアウトを指定する。これを越えるとエラーを報告する。
447 引き数は
448 .I "struct timeval"
449 である。
450 入出力関数がタイムアウト時間の間ブロックされ、かつデータの送信または
451 受信が行われていた場合は、転送されたデータ量が関数の返り値となる。
452 何もデータが転送されずにタイムアウトに達した場合は、
453 \-1 を返し、
454 .I errno
455
456 .B EAGAIN
457
458 .B EWOULDBLOCK
459 を設定され、
460 .\" 実際には EAGAIN が設定される
461 あたかもソケットに非ブロッキングが指定されたように見える。
462 タイムアウト値に (デフォルト値である) 0 に設定すると、
463 操作は決してタイムアウトしなくなる。
464 タイムアウトが影響を及ぼすのは、
465 ソケット I/O を実行するシステムコールだけ
466 (例えば
467 .BR read (2),
468 .BR recvmsg (2),
469 .BR send (2),
470 .BR sendmsg (2))
471 である。
472 .BR select (2),
473 .BR poll (2),
474 .BR epoll_wait (2)
475 などにはタイムアウトは影響を及ぼさない。
476 .TP
477 .B SO_REUSEADDR
478 .BR bind (2)
479 コールに与えられたアドレスが正しいかを判断するルールで、
480 ローカルアドレスの再利用を可能にする。
481 つまり
482 .B AF_INET
483 ソケットなら、そのアドレスにバインドされたアクティブな listen
484 状態のソケットが存在しない限り、バインドが行える。
485 listen 状態のソケットがアドレス
486 .B INADDR_ANY
487 で特定のポートにバインドされている場合には、
488 このポートに対しては、どんなローカルアドレスでもバインドできない。
489 引き数はブール整数のフラグである。
490 .TP
491 .B SO_SNDBUF
492 ソケットの送信バッファの最大サイズを設定・取得する (バイト単位)。
493 .BR setsockopt (2)
494 を使って値が設定されたときに (管理オーバヘッド用の領域を確保するために)
495 カーネルはこの値を 2倍し、
496 .\" 他のほとんどの (全ての?) 実装ではこんなことは行っていない -- MTK, Dec 05
497 .BR getsockopt (2)
498 はこの 2倍された値を返す。
499 デフォルトの値は
500 .I /proc/sys/net/core/wmem_default
501 ファイルで設定され、許容される最大の値は
502 .I /proc/sys/net/core/wmem_max
503 ファイルで設定される。
504 このオプションの最小値は (2倍した値で) 2048 である。
505 .TP
506 .BR SO_SNDBUFFORCE " (Linux 2.6.14 以降)"
507 このソケットオプションを使うと、特権プロセス
508 .RB ( CAP_NET_ADMIN
509 を持つプロセス) は
510 .B SO_SNDBUF
511 と同じことを実行できる。
512 ただし、上限
513 .I wmem_max
514 を上書きすることができる。
515 .TP
516 .B SO_TIMESTAMP
517 .B SO_TIMESTAMP
518 制御メッセージの受信を有効/無効にする。
519 タイムスタンプ制御メッセージはレベル
520 .B SOL_SOCKET
521 で送信され、
522 .I cmsg_data
523 フィールドはこのシステムコールでユーザに渡した
524 最後のパケットの受信時刻を示す
525 .I "struct timeval"
526 である。
527 制御メッセージの詳細については
528 .BR cmsg (3)
529 を参照。
530 .TP
531 .B SO_TYPE
532 ソケットのタイプを整数で取得する (例:
533 .BR SOCK_STREAM )。
534 .BR getsockopt (2)
535 からのみ読み出し可能である。
536 .SS シグナル
537 (ローカルもしくはリモート側で) 切断された
538 接続指向 (connection-oriented) のソケットに対して
539 書き込みを行うと、その書き込みを行ったプロセスに
540 .B SIGPIPE
541 が送られ、
542 .B EPIPE
543 が返される。 write 呼び出しに
544 .B MSG_NOSIGNAL
545 フラグを指定していた場合はシグナルは送られない。
546 .PP
547 .B FIOSETOWN
548 .BR fcntl (2)
549
550 .B SIOCSPGRP
551 .BR ioctl (2)
552 をプロセスまたはプロセスグループに指定しておくと、
553 I/O イベントが起きたときに
554 .B SIGIO
555 が送られる。
556 .BR poll (2)
557
558 .BR select (2)
559 をシグナルハンドラ内で用いれば、どのソケットでイベントが起こったかを
560 知ることができる。
561 (Linux 2.2 における) 別の方法としては、
562 .B F_SETSIG
563 .BR fcntl (2)
564 を用いてリアルタイムシグナルを設定するやり方もある。
565 リアルタイムシグナルのハンドラは、
566 .I siginfo_t
567
568 .I si_fd
569 フィールドにファイルディスクリプタが入った状態で呼び出される。
570 詳細は
571 .BR fcntl (2)
572 を参照のこと。
573 .PP
574 状況によっては (例えば複数のプロセスが一つのソケットにアクセスしているなど)、
575 .B SIGIO
576 の原因となった状態は、プロセスがそのシグナルへの対応を行ったときには
577 消えてしまっているかもしれない。
578 この場合は、プロセスは再び待つようにすべきである。
579 Linux は同じシグナルを後で再送するからである。
580 .\" .SS Ancillary Messages
581 .SS /proc インタフェース
582 core のソケットのネットワーキングパラメータには、
583 .I /proc/sys/net/core/
584 ディレクトリ内のファイルを通してアクセスできる。
585 .TP
586 .I rmem_default
587 ソケットの受信バッファサイズのデフォルト値 (バイト単位)。
588 .TP
589 .I rmem_max
590 .B SO_RCVBUF
591 ソケットオプションを用いてユーザが設定できる
592 ソケットの受信バッファサイズの最大値 (バイト単位)。
593 .TP
594 .I wmem_default
595 ソケットの送信バッファサイズのデフォルト値 (バイト単位)。
596 .TP
597 .I wmem_max
598 .B SO_SNDBUF
599 ソケットオプションを用いてユーザが設定できる
600 ソケットの送信バッファサイズの最大値 (バイト単位)。
601 .TP
602 .IR message_cost " と " message_burst
603 トークン・バケット・フィルターを設定する。
604 これは外部のネットワークイベントによって引き起こされた
605 負荷限界の警告メッセージに用いられる。
606 .\"NAKANO "load limit" だと思うんだけど...
607 .TP
608 .I netdev_max_backlog
609 グローバルな入力キューにおける最大のパケット数。
610 .TP
611 .I optmem_max
612 ソケットあたりの、補助データ (ancillary data) とユーザ制御データ
613 (iovecs のようなもの) との和の最大長。
614 .\" netdev_fastroute is not documented because it is experimental
615 .SS ioctl
616 以下に示す操作には
617 .BR ioctl (2)
618 を用いてアクセスできる。
619
620 .in +4n
621 .nf
622 .IB error " = ioctl(" ip_socket ", " ioctl_type ", " &value_result ");"
623 .fi
624 .in
625 .TP
626 .B SIOCGSTAMP
627 最後にユーザに渡されたパケットの受信タイムスタンプを
628 .I struct timeval
629 に入れて返す。
630 これは round trip 時間を正確に測りたいときに便利である。
631 .I struct timeval
632 の説明は
633 .BR setitimer (2)
634 を見てほしい。
635 .\"
636 この ioctl は、ソケットオプション
637 .B SO_TIMESTAMP
638 がソケットにセットされていない場合にのみ使用すべきである。
639 さもなければ、この ioctl は
640 .B SO_TIMESTAMP
641 がセットされていなかった間に受信した最後のパケットの時刻を返すか、
642 そのようなパケットを受信していない場合には失敗する
643 (つまり、
644 .BR ioctl (2)
645 は \-1 を返し、
646 .I errno
647
648 .B ENOENT
649 をセットする)。
650 .TP
651 .B SIOCSPGRP
652 非同期 I/O 操作の終了時や緊急データの受信時に
653 .B SIGIO
654
655 .B SIGURG
656 シグナル群を送るプロセスやプロセスグループを設定する。
657 引き数は
658 .I pid_t
659 へのポインタである。
660 引き数が正だと、そのプロセスにシグナルが送られる。負だと、
661 引き数の絶対値を ID に持つプロセスグループにシグナルが送られる。
662 シグナル受信先には、自分自身のプロセス / 自分の所属するプロセスグループ
663 しか指定できない。但し、
664 .B CAP_KILL
665 ケーパビリティを持っている場合、及び実効ユーザ ID が 0 のプロセスの場合は
666 この限りではない。
667 .TP
668 .B FIOASYNC
669 .B O_ASYNC
670 フラグを変更し、ソケットの非同期 (asynchronous) I/O モードを
671 有効/無効にする。非同期 I/O モードでは、
672 新しい I/O イベントが起きたときに、
673 .B SIGIO
674 シグナルや
675 .B F_SETSIG
676 で設定されたシグナル・セットが発行される。
677 .IP
678 引き数はブール整数のフラグである。
679 (この操作は
680 .BR fcntl (2)
681 を使って
682 .B O_ASYNC
683 フラグをセットするのと同じ意味である。)
684 .\"
685 .TP
686 .B SIOCGPGRP
687 .B SIGIO
688
689 .B SIGURG
690 を受信したカレントプロセス・プロセスグループを取得する。
691 ない場合は 0 が返る。
692 .PP
693 有効な
694 .BR fcntl (2)
695 操作:
696 .TP
697 .B FIOGETOWN
698 .B SIOCGPGRP
699 .BR ioctl (2)
700 と同じ。
701 .TP
702 .B FIOSETOWN
703 .B SIOCSPGRP
704 .BR ioctl (2)
705 と同じ。
706 .SH バージョン
707 .B SO_BINDTODEVICE
708 は Linux 2.0.30 で導入された。
709 .B SO_PASSCRED
710 は Linux 2.2 で登場した。
711 .I /proc
712 インタフェースは Linux 2.2 で導入された。
713 .B SO_RCVTIMEO
714
715 .B SO_SNDTIMEO
716 は Linux 2.3.41 以降でサポートされている。
717 それ以前は、タイムアウトはプロトコル固有の固定の設定値で、
718 読み書きをすることはできなかった。
719 .SH 注意
720 Linux は、送受信バッファの半分を内部のカーネル構造体で用いると仮定している。
721 したがって、対応する
722 .I /proc
723 ファイルはネットワーク回線上での大きさの 2 倍になる。
724
725 Linux では、
726 .B SO_REUSEADDR
727 オプションでポートの再利用が許可されるのは、
728 そのポートに対して
729 .BR bind (2)
730 を前に実行したプログラムとそのポートを再利用
731 しようとするプログラムの両方で
732 .B SO_REUSEADDR
733 がセットされた場合のみである。
734 この動作は (FreeBSD などの) いくつかの実装とは異なる。これらでは、
735 後でポートを再利用しようとするプログラムで
736 .B SO_REUSEADDR
737 オプションをセットするだけでよい。
738 たいていはこの違いは見えない。なぜなら、例えばサーバプログラムは
739 常にこのオプションをセットするように設計されるからである。
740 .SH バグ
741 .\" FIXME Document SO_ATTACH_FILTER and SO_DETACH_FILTER
742 .B CONFIG_FILTER
743 ソケットオプションである
744 .B SO_ATTACH_FILTER
745
746 .B SO_DETACH_FILTER
747 について記載されていない。これらは libpcap ライブラリを通して
748 用いる方が良い。
749 .\" .SH 著者
750 .\" この man ページは Andi Kleen が書いた。
751 .SH 関連項目
752 .BR getsockopt (2),
753 .BR setsockopt (2),
754 .BR socket (2),
755 .BR capabilities (7),
756 .BR ddp (7),
757 .BR ip (7),
758 .BR packet (7),
759 .BR tcp (7),
760 .BR udp (7),
761 .BR unix (7)