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.
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
17 .\" The following are not yet documented:
22 .\" SO_PROTOCOL (2.6.32)
23 .\" SO_DOMAIN (2.6.32)
24 .\" SO_RXQ_OVFL (2.6.33)
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
36 .\"WORD protocol family プロトコルファミリー
37 .\"WORD socket type ソケットタイプ
38 .\"WORD file descriptor ファイルディスクリプタ
39 .\"WORD anonymous socket 名前無しソケット
40 .\"WORD asynchronous 非同期 (的)
41 .\"WORD credential 信任状
43 .\"WORD ancillary data 補助データ
45 .TH SOCKET 7 2008-12-03 Linux "Linux Programmer's Manual"
47 socket \- Linux のソケットインターフェース
49 .B #include <sys/socket.h>
51 .IB sockfd " = socket(int " socket_family ", int " socket_type ", int " protocol );
53 このマニュアルページは Linux ネットワークのソケット層に対する
54 ユーザインターフェースを記述するものである。
55 BSD 互換ソケットは、ユーザプロセスとカーネル内部の
57 統一的なインターフェースを提供するものである。
59 .I "プロトコルファミリー (protocol familiy)"
61 .BR AF_INET ", " AF_IPX ", " AF_PACKET )
63 .I "ソケットタイプ (socket types)"
65 .BR SOCK_STREAM ", " SOCK_DGRAM )
71 これらの関数はユーザプロセスがパケットを送受信したり、その他のソケット操作を
72 行ったりするために用いられる。詳細はそれぞれのマニュアルページを
78 はソケットをリモートのソケットアドレスに接続する。
80 はソケットをローカルのソケットアドレスにバインドする。
82 はソケットに新しい接続が来たら受信するように伝え、
84 は外部からやってきた接続に対して新しいソケットを得るために用いられる。
86 は互いに接続された二つの名前無しソケット (anonymous socket) を返す
88 のような、いくつかのローカルなファミリーでしか実装されていない)。
101 はデータの到着を待ったり、データ送信の準備ができるまで待ったりする。
108 のような標準的な I/O 操作もデータの読み書きに用いることができる。
110 .BR getsockbyname (2)
117 はソケット層のオプションやプロトコルオプションの取得・設定に用いられる。
125 は全二重なソケット接続を部分的にクローズする。
133 非ブロッキングな I/O をソケットで行うことは可能で、
135 を使ってソケットのファイルディスクリプタに
138 こうするとブロックされる操作は、 (通常)
141 (後で処理が再試行されることが期待されている)。
168 接続が壊れた (接続志向のプロトコルのみ)。
186 Read/Write:POLLERR:T{
187 非同期的 (asynchronous) なエラーが起こった。
189 Read/Write:POLLHUP:接続先が片方向を切断した。
191 緊急データ (urgent data) が到着した。
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
208 を使う代わりに、カーネルからアプリケーションに
214 を用いてソケットのファイルディスクリプタに
234 .\" SO_ACCEPTCONN は POSIX.1-2001 で定義されており、元は
235 .\" W R Stevens の UNPv1 に書かれていた。
240 によって接続待ち受け状態に設定されているかどうかを示す値を返す。
241 値 0 は listen 状態のソケットでないことを、
242 値 1 は listen 状態のソケットであることを示す。
247 このソケットを、引き数で渡したインターフェース名で指定される
248 (\(lqeth0\(rq のような) 特定のデバイスにバインドする。
249 名前が空文字列だったり、オプションの長さ (optlen) が 0 の場合には、
250 ソケットのバインドが削除される。渡すオプションは、インターフェース名が
251 入ったヌル文字で終端された可変長の文字列である。
255 ソケットがインターフェースにバインドされると、
256 その特定のインターフェースから受信されたパケットだけを処理する。
257 このオプションはいくつかのソケットタイプ、特に
260 パケットソケットではサポートされていない (通常の
265 ブロードキャストフラグを設定・取得する。有効になっていると、
266 データグラムソケットはブロードキャストアドレスに送られたパケットを受信したり、
267 ブロードキャストアドレスにパケットを送信したりできるようになる。
268 ストリーム指向のソケットには何の効果もない。
271 BSD のバグに対して互換性を取るための機能を有効にする。
272 この機能は Linux 2.0 と 2.2 の UDP プロトコルモジュールで使用されている。
273 有効になっていると、 UDP ソケットで受信された ICMP エラーは
275 これ以降のバージョンのカーネルでは、このオプションのサポートは
277 Linux 2.4 ではこのオプションは黙って無視され、
278 Linux 2.6 ではプログラムがこのオプションを使用すると (printk() を使って)
280 Linux 2.0 では、このオプションを指定すると、
281 raw ソケットにおいても BSD のバグ (ランダムヘッダ変更、
284 しかし、こちらは Linux 2.2 で削除された。
289 権限を持つプロセスか、実効ユーザ ID が 0 のプロセスでしか
293 保留になっていたソケットエラーを取得してクリアする。
299 ゲートウェイを経由せず、直接接続されているホストに送信する。
303 フラグをセットした場合も同じ効果が得られる。
307 接続志向のソケットに対する keep-alive メッセージの送信を有効にする。
319 int l_onoff; /* linger active */
320 int l_linger; /* how many seconds to linger for */
329 は、そのソケットにキューイングされたメッセージがすべて送信完了するか、
330 linger (居残り) タイムアウトになるまで返らない。無効になっていると、
331 これらのコールはただちに戻り、クローズ動作はバックグラウンドで行われる。
334 の一部として行った場合には、残っているソケットの
335 クローズ動作は必ずバックグラウンドに送られる。
338 このオプションを有効にすると、帯域外データ (out-of-band data) は
339 受信データストリーム中に置かれる。有効にしなければ、
342 フラグがセットされている場合に限って渡される。
343 .\" あまりに危険なことができるので、このオプションについては記載しないこと。
348 制御メッセージの受信を有効/無効にする。詳細は
351 .\" FIXME Document SO_PASSSEC, added in 2.6.18; there is some info
352 .\" in the 2.6.18 ChangeLog
355 このソケットに接続してきた外部プロセスの信任状 (credential) を返す。
363 のストリームソケットとデータグラムソケットのペアだけである。
369 が呼ばれた時に有効であった信任状が返される。
377 プロトコルで定義された優先度を、このソケットから
378 送信される全てのパケットにセットする。 Linux はネットワークキュー内部の
379 整列にこの値を用いる。高い優先度を持っているパケットは先に処理される。
380 ただしそのデバイスのキュー処理のやり方に依存する。
382 では、外向けパケットの IP type-of-service (TOS) フィールドにもこの値が設定される。
383 0 から 6 以外の優先度をセットするには
388 ソケットの受信バッファの最大サイズを設定・取得する (バイト単位)。
390 を使って値が設定されたときに (管理オーバヘッド用の領域を確保するために)
392 .\" 他のほとんどの (全ての?) 実装ではこんなことは行っていない -- MTK, Dec 05
396 .I /proc/sys/net/core/rmem_default
398 .I /proc/sys/net/core/rmem_max
400 このオプションの最小値は (2倍した値で) 256 である。
402 .BR SO_RCVBUFFORCE " (Linux 2.6.14 以降)"
403 このソケットオプションを使うと、特権プロセス
412 .BR SO_RCVLOWAT " と " SO_SNDLOWAT
413 バッファ中に溜めることのできるデータの最小値を指定する。
414 このサイズを越えると、ソケット層はそのデータをプロトコルに渡し
426 は Linux 2.4 以降でのみ変更可能である。
434 データが1バイト利用可能になっただけでも、
435 ソケットは読み出し可能とのマークをつける。
436 一方、それに続けて行うソケットからの read は
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
442 .BR SO_RCVTIMEO " と " SO_SNDTIMEO
444 .\" getsockopt については 2.1.11 で実装された。常に 0 の構造体を返す。
445 .\" setsockopt については 2.3.41 で実装され、実際に使われている。
446 送信・受信のタイムアウトを指定する。これを越えるとエラーを報告する。
450 入出力関数がタイムアウト時間の間ブロックされ、かつデータの送信または
451 受信が行われていた場合は、転送されたデータ量が関数の返り値となる。
452 何もデータが転送されずにタイムアウトに達した場合は、
460 .\" 実際には EAGAIN が設定される
461 あたかもソケットに非ブロッキングが指定されたように見える。
462 タイムアウト値に (デフォルト値である) 0 に設定すると、
465 ソケット I/O を実行するシステムコールだけ
479 コールに与えられたアドレスが正しいかを判断するルールで、
483 ソケットなら、そのアドレスにバインドされたアクティブな listen
484 状態のソケットが存在しない限り、バインドが行える。
487 で特定のポートにバインドされている場合には、
488 このポートに対しては、どんなローカルアドレスでもバインドできない。
492 ソケットの送信バッファの最大サイズを設定・取得する (バイト単位)。
494 を使って値が設定されたときに (管理オーバヘッド用の領域を確保するために)
496 .\" 他のほとんどの (全ての?) 実装ではこんなことは行っていない -- MTK, Dec 05
500 .I /proc/sys/net/core/wmem_default
502 .I /proc/sys/net/core/wmem_max
504 このオプションの最小値は (2倍した値で) 2048 である。
506 .BR SO_SNDBUFFORCE " (Linux 2.6.14 以降)"
507 このソケットオプションを使うと、特権プロセス
523 フィールドはこのシステムコールでユーザに渡した
537 (ローカルもしくはリモート側で) 切断された
538 接続指向 (connection-oriented) のソケットに対して
539 書き込みを行うと、その書き込みを行ったプロセスに
545 フラグを指定していた場合はシグナルは送られない。
552 をプロセスまたはプロセスグループに指定しておくと、
559 をシグナルハンドラ内で用いれば、どのソケットでイベントが起こったかを
561 (Linux 2.2 における) 別の方法としては、
564 を用いてリアルタイムシグナルを設定するやり方もある。
569 フィールドにファイルディスクリプタが入った状態で呼び出される。
574 状況によっては (例えば複数のプロセスが一つのソケットにアクセスしているなど)、
576 の原因となった状態は、プロセスがそのシグナルへの対応を行ったときには
578 この場合は、プロセスは再び待つようにすべきである。
579 Linux は同じシグナルを後で再送するからである。
580 .\" .SS Ancillary Messages
582 core のソケットのネットワーキングパラメータには、
583 .I /proc/sys/net/core/
584 ディレクトリ内のファイルを通してアクセスできる。
587 ソケットの受信バッファサイズのデフォルト値 (バイト単位)。
591 ソケットオプションを用いてユーザが設定できる
592 ソケットの受信バッファサイズの最大値 (バイト単位)。
595 ソケットの送信バッファサイズのデフォルト値 (バイト単位)。
599 ソケットオプションを用いてユーザが設定できる
600 ソケットの送信バッファサイズの最大値 (バイト単位)。
602 .IR message_cost " と " message_burst
603 トークン・バケット・フィルターを設定する。
604 これは外部のネットワークイベントによって引き起こされた
606 .\"NAKANO "load limit" だと思うんだけど...
608 .I netdev_max_backlog
609 グローバルな入力キューにおける最大のパケット数。
612 ソケットあたりの、補助データ (ancillary data) とユーザ制御データ
613 (iovecs のようなもの) との和の最大長。
614 .\" netdev_fastroute is not documented because it is experimental
622 .IB error " = ioctl(" ip_socket ", " ioctl_type ", " &value_result ");"
627 最後にユーザに渡されたパケットの受信タイムスタンプを
630 これは round trip 時間を正確に測りたいときに便利である。
638 がソケットにセットされていない場合にのみ使用すべきである。
641 がセットされていなかった間に受信した最後のパケットの時刻を返すか、
642 そのようなパケットを受信していない場合には失敗する
652 非同期 I/O 操作の終了時や緊急データの受信時に
656 シグナル群を送るプロセスやプロセスグループを設定する。
660 引き数が正だと、そのプロセスにシグナルが送られる。負だと、
661 引き数の絶対値を ID に持つプロセスグループにシグナルが送られる。
662 シグナル受信先には、自分自身のプロセス / 自分の所属するプロセスグループ
665 ケーパビリティを持っている場合、及び実効ユーザ ID が 0 のプロセスの場合は
670 フラグを変更し、ソケットの非同期 (asynchronous) I/O モードを
671 有効/無効にする。非同期 I/O モードでは、
676 で設定されたシグナル・セットが発行される。
690 を受信したカレントプロセス・プロセスグループを取得する。
708 は Linux 2.0.30 で導入された。
712 インタフェースは Linux 2.2 で導入された。
716 は Linux 2.3.41 以降でサポートされている。
717 それ以前は、タイムアウトはプロトコル固有の固定の設定値で、
720 Linux は、送受信バッファの半分を内部のカーネル構造体で用いると仮定している。
723 ファイルはネットワーク回線上での大きさの 2 倍になる。
727 オプションでポートの再利用が許可されるのは、
730 を前に実行したプログラムとそのポートを再利用
734 この動作は (FreeBSD などの) いくつかの実装とは異なる。これらでは、
735 後でポートを再利用しようとするプログラムで
738 たいていはこの違いは見えない。なぜなら、例えばサーバプログラムは
739 常にこのオプションをセットするように設計されるからである。
741 .\" FIXME Document SO_ATTACH_FILTER and SO_DETACH_FILTER
747 について記載されていない。これらは libpcap ライブラリを通して
750 .\" この man ページは Andi Kleen が書いた。
755 .BR capabilities (7),