From 860443fc3fab5d90d3033d33bd82c0d673222a78 Mon Sep 17 00:00:00 2001 From: Akihiro MOTOKI Date: Wed, 2 May 2012 08:52:21 +0900 Subject: [PATCH] (split) LDP: draft snapshot generated from latest ja.po files. --- draft/man3/aio_cancel.3 | 86 ++++++ draft/man3/aio_init.3 | 98 +++++++ draft/man3/pthread_cancel.3 | 4 + draft/man3/strerror.3 | 136 +++++++++ draft/man7/aio.7 | 418 ++++++++++++++++++++++++++ draft/man7/tcp.7 | 695 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1437 insertions(+) create mode 100644 draft/man3/aio_cancel.3 create mode 100644 draft/man3/aio_init.3 create mode 100644 draft/man3/strerror.3 create mode 100644 draft/man7/aio.7 create mode 100644 draft/man7/tcp.7 diff --git a/draft/man3/aio_cancel.3 b/draft/man3/aio_cancel.3 new file mode 100644 index 00000000..5be3d45c --- /dev/null +++ b/draft/man3/aio_cancel.3 @@ -0,0 +1,86 @@ +.\" Copyright (c) 2003 Andries Brouwer (aeb@cwi.nl) +.\" +.\" This is free documentation; you can redistribute it and/or +.\" modify it under the terms of the GNU General Public License as +.\" published by the Free Software Foundation; either version 2 of +.\" the License, or (at your option) any later version. +.\" +.\" The GNU General Public License's references to "object code" +.\" and "executables" are to be interpreted as the output of any +.\" document formatting or typesetting system, including +.\" intermediate and printed output. +.\" +.\" This manual is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public +.\" License along with this manual; if not, write to the Free +.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, +.\" USA. +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH AIO_CANCEL 3 2012\-04\-18 "" "Linux Programmer's Manual" +.SH 名前 +aio_cancel \- 完了していない非同期 I/O リクエストをキャンセルする +.SH 書式 +\fB#include \fP +.sp +\fBint aio_cancel(int \fP\fIfd\fP\fB, struct aiocb *\fP\fIaiocbp\fP\fB);\fP +.sp +\fI\-lrt\fP でリンクする。 +.SH 説明 +\fBaio_cancel\fP() 関数は、ファイルディスクリプタ \fIfd\fP についての完了していない +非同期 I/O リクエストをキャンセルしようとする。 \fIaiocbp\fP が NULL の場合、そ +のような全てのリクエストがキャンセルされる。 \fIaiocbp\fP が NULL でない場合、 +\fIaiocbp\fP で指された制御ブロックで記述されたリクエストのみがキャンセルされる。 +(\fIaiocb\fP 構造体の説明は \fBaio\fP(7) を参照) +.LP +キャンセルされたリクエストに対して、通常の非同期通知が起こる。 +リクエストの返り値 (\fBaio_return\fP(3)) は \-1 に設定され、 +リクエストのエラー状態 (\fBaio_error\fP(3)) は \fBECANCELED\fP に設定される。 +キャンセルできないリクエストの制御ブロックは変更されない。 +.LP +\fIaiocbp\fP が NULL でなく、かつ \fIfd\fP が非同期操作が開始されたファイルディスクリプタと異なる場合、 生じる結果は不定である。 +.LP +.\" FreeBSD: not those on raw disk devices. +どの操作をキャンセルできるかは、実装定義である。 +.SH 返り値 +\fBaio_cancel\fP() 関数は以下のいずれかの値を返す。 +.TP +\fBAIO_CANCELED\fP +全てのリクエストが正常にキャンセルされた。 +.TP +\fBAIO_NOTCANCELED\fP +指定されたリクエストのうち少なくとも一つが、実行中のため +キャンセルできなかった。この場合には、\fBaio_error\fP(3) を使って +個々のリクエストの状態を確認できる。 +.TP +\fBAIO_ALLDONE\fP +呼び出しの前に全てのリクエストがすでに完了していた。 +.TP +\-1 +エラーが発生した。 +\fIerrno\fP を確認することでエラーの原因を知ることができる。 +.SH エラー +.TP +\fBEBADF\fP +\fIfd\fP が有効なファイルディスクリプタでない。 +.SH バージョン +\fBaio_cancel\fP() 関数は glibc 2.1 以降で利用できる。 +.SH 準拠 +POSIX.1\-2001, POSIX.1\-2008. +.SH 例 +\fBaio\fP(7) を参照。 +.SH 関連項目 +\fBaio_error\fP(3), \fBaio_fsync\fP(3), \fBaio_read\fP(3), \fBaio_return\fP(3), +\fBaio_suspend\fP(3), \fBaio_write\fP(3), \fBlio_listio\fP(3), \fBaio\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/aio_init.3 b/draft/man3/aio_init.3 new file mode 100644 index 00000000..63e38acd --- /dev/null +++ b/draft/man3/aio_init.3 @@ -0,0 +1,98 @@ +.\" t +.\" Copyright (c) 2010 by Michael Kerrisk +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH AIO_INIT 3 2012\-04\-26 Linux "Linux Programmer's Manual" +.SH 名前 +aio_init \- 非同期 I/O の初期化 +.SH 書式 +.nf +\fB#define _GNU_SOURCE\fP /* See feature_test_macros(7) */ +\fB#include \fP + +\fBvoid aio_init(const struct aioinit *\fP\fIinit\fP\fB);\fP +.fi +.sp +\fI\-lrt\fP でリンクする。 +.SH 説明 +GNU 固有の \fBaio_init\fP() 関数を使うと、呼び出し側が glibc の POSIX AIO 実装に +対して調整 (チューニング) のヒントを与えることができる。この関数は使用しなく +てもよいが、この関数が効果を持つには、POSIX AIO API の他の関数を利用する前に +呼び出さなければならない。 + +チューニングの情報は、引き数 \fIinit\fP が指すバッファで与える。 +このバッファは以下の形式の構造体である。 +.PP +.in +4n +.nf +struct aioinit { + int aio_threads; /* Maximum number of threads */ + int aio_num; /* Number of expected simultaneous + requests */ + int aio_locks; /* Not used */ + int aio_usedba; /* Not used */ + int aio_debug; /* Not used */ + int aio_numusers; /* Not used */ + int aio_idle_time; /* Number of seconds before idle thread + terminates (since glibc 2.2) */ + int aio_reserved; +}; +.fi +.in +.PP +\fIaioinit\fP 構造体のフィールドのうち以下が使用される。 +.TP 15 +\fIaio_threads\fP +このフィールドは、AIO の実装が使用できるワーカースレッド数の最大値を指定する。 +完了していない I/O 操作の数がこの上限を超えた場合、超過した操作は +空いたワーカースレッドができるまでキューに入る。 +このフィールドに 1 未満の値を指定した場合には、値 1 が使用される。 +デフォルト値は 20 である。 +.TP +\fIaio_num\fP +.\" FIXME But, if aio_num > 32, the behavior looks strange. See +.\" http://sourceware.org/bugzilla/show_bug.cgi?id=12083 +このフィールドは、呼び出し側がキューに入れる予定の +同時 I/O リクエスト数の最大値を指定する。 +このフィールドに 32 未満の値が指定された場合、値は 32 に切り上げられる。 +デフォルト値は 64 である。 +.TP +\fIaio_idle_time\fP +このフィールドは、あるワーカースレッドが、前のリクエストの処理を完了してから、 +次のリクエストをどのくらい時間待つかを秒単位で指定する。 +指定した時間を経過しても次のリクエストがなければ、 +そのワーカースレッドは終了される。デフォルト値は 1 秒である。 +.SH バージョン +The \fBaio_init\fP() 関数は glibc 2.1 以降で利用できる。 +.SH 準拠 +この関数は GNU による拡張である。 +.SH 関連項目 +\fBaio\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/pthread_cancel.3 b/draft/man3/pthread_cancel.3 index ec392964..d49e7502 100644 --- a/draft/man3/pthread_cancel.3 +++ b/draft/man3/pthread_cancel.3 @@ -192,3 +192,7 @@ main(void) \fBpthread_cleanup_push\fP(3), \fBpthread_create\fP(3), \fBpthread_exit\fP(3), \fBpthread_join\fP(3), \fBpthread_key_create\fP(3), \fBpthread_setcancelstate\fP(3), \fBpthread_setcanceltype\fP(3), \fBpthread_testcancel\fP(3), \fBpthreads\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man3/strerror.3 b/draft/man3/strerror.3 new file mode 100644 index 00000000..cfbf1c85 --- /dev/null +++ b/draft/man3/strerror.3 @@ -0,0 +1,136 @@ +.\" Copyright (C) 1993 David Metcalfe (david@prism.demon.co.uk) +.\" and Copyright (C) 2005, Michael Kerrisk +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\" References consulted: +.\" Linux libc source code +.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) +.\" 386BSD man pages +.\" Modified Sat Jul 24 18:05:30 1993 by Rik Faith +.\" Modified Fri Feb 16 14:25:17 1996 by Andries Brouwer +.\" Modified Sun Jul 21 20:55:44 1996 by Andries Brouwer +.\" Modified Mon Oct 15 21:16:25 2001 by John Levon +.\" Modified Tue Oct 16 00:04:43 2001 by Andries Brouwer +.\" Modified Fri Jun 20 03:04:30 2003 by Andries Brouwer +.\" 2005-12-13, mtk, Substantial rewrite of strerror_r() description +.\" Addition of extra material on portability and standards. +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH STRERROR 3 2012\-04\-22 "" "Linux Programmer's Manual" +.SH 名前 +strerror, strerror_r \- エラー番号を説明する文字列を返す。 +.SH 書式 +.nf +\fB#include \fP +.sp +\fBchar *strerror(int \fP\fIerrnum\fP\fB);\fP +.sp +\fBint strerror_r(int \fP\fIerrnum\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbuflen\fP\fB);\fP + /* XSI\-compliant */ +.sp +\fBchar *strerror_r(int \fP\fIerrnum\fP\fB, char *\fP\fIbuf\fP\fB, size_t \fP\fIbuflen\fP\fB);\fP + /* GNU\-specific */ +.fi +.sp +.in -4n +glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): +.in +.sp +次の場合には XSI 準拠のバージョンの \fBstrerror_r\fP() が提供される: +.br +(_POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600) && !\ _GNU_SOURCE +.br +それ以外の場合、GNU バージョンが提供される。 +.SH 説明 +\fBstrerror\fP() 関数は、引き数 \fIerrnum\fP で渡されたエラーコードについての +説明が入った文字列へのポインタを返す。 可能であるならば、適切な言語を選 +択するために、 現在のロケールの \fBLC_MESSAGES\fP を使う。(例えば、 +\fIerrnum\fP が \fBEINVAL\fP の場合、説明として"Invalid argument" が返され +る。) この文字列は、アプリケーションで変更してはならないが、 これ以降に +行われる \fBstrerror\fP() の呼び出しで 変更されても構わない。この文字列を +変更するライブラリ関数はない (\fBperror\fP(3) も含まれる)。 + +\fBstrerror_r\fP() 関数は \fBstrerror\fP() と似ているが、スレッドセーフである。 +この関数には二種類のバージョンが存在し、 POSIX.1\-2001 で規定された XSI +準拠のバージョン (glibc 2.3.4 以降で利用可能だが、glibc 2.13 までは +POSIX 準拠ではない) と、 GNU 仕様のバージョン (glibc 2.0 以降で利用可能) +である。 「書式」の節に記載された機能検査マクロの場合には、 XSI 準拠の +バージョンが提供される。それ以外の場合には GNU 仕様のバージョンが提供さ +れる。機能検査マクロが一つも明示的に定義されない場合、 (glibc 2.4 以降 +では) デフォルトで \fB_POSIX_SOURCE\fP は値 200112l で定義され、その結果 +XSI 準拠のバージョンの \fBstrerror_r\fP() がデフォルトで提供される。 + +移植性が必要なアプリケーションでは、 XSI 準拠の \fBstrerror_r\fP() を使う方がよい。 この関数は、ユーザーから提供される長さ +\fIbuflen\fP のバッファ \fIbuf\fP にエラー文字列を返す。 + +GNU 仕様の \fBstrerror_r\fP() は、エラーメッセージを格納した文字列へのポイ +ンタを返す。返り値は、この関数が \fIbuf\fP に格納した文字列へのポインタか、 +何らかの (不変な) 静的な文字列へのポインタ、のいずれかとなる (後者の場 +合は \fIbuf\fP は使用されない)。 \fIbuf\fP に文字列が格納される場合は、最大で +\fIbuflen\fP バイトが格納される (\fIbuflen\fP が小さ過ぎたときには文字列は切 +り詰められ、 \fIerrnum\fP は不定である)。文字列には必ず終端ヌル文字が含ま +れる。 +.SH 返り値 +\fBstrerror\fP() と \fBstrerror_r\fP() はエラー内容を説明する 文字列を返す。エラー番号が未知の場合は "Unknown +error nnn" という メッセージを返す。 + +POSIX.1\-2001 と POSIX.1\-2008 では、 \fBstrerror\fP(3) が成功した場合は +\fIerrno\fP を変更せずに元のままにしなければならないとされている。関数のど +の返り値もエラーを示すために予約されていないので、エラーをチェックした +いアプリケーションは呼び出しを行う前に \fIerrno\fP を 0 に初期化し、呼び出 +しの後で \fIerrno\fP をチェックすべき点に注意すること。 + +XSI 準拠の \fBstrerror_r\fP() 関数は成功すると 0 を返す。エラーの場合には、 +(glibc 2.13 以降では) (正の) エラー番号が返され、(バージョン 2.13 より前 +の glibc では) \-1 が返され、 \fIerrno\fP にエラーを示す値がセットされる。 +.SH エラー +.TP +\fBEINVAL\fP +\fIerrnum\fP の値が有効なエラー番号ではない。 +.TP +\fBERANGE\fP +エラーコードを説明する文字列のために、充分な領域が確保できなかった。 +.SH 準拠 +\fBstrerror\fP() は POSIX.1\-2001, C89, C99 で規定されている。 \fBstrerror_r\fP() は +POSIX.1\-2001 で規定されている。 + +GNU 仕様の \fBstrerror_r\fP() 関数は非標準の拡張である。 + +.\" e.g., Solaris 8, HP-UX 11 +.\" e.g., FreeBSD 5.4, Tru64 5.1B +POSIX.1\-2001 は、 \fBstrerror\fP() がエラーに遭遇した場合に \fIerrno\fP をセッ +トすることを認めているが、エラー発生時に関数の結果として どんな値を返す +べきかを規定してない。 あるシステムでは、 エラー番号が未知の場合、 +\fBstrerror\fP() は NULL を返す。 他のシステムでは、 エラー番号が未知の場 +合、 \fBstrerror\fP() は "Error nnn occurred" といった文字列を返し、 +\fIerrno\fP に \fBEINVAL\fP をセットする。 C99 と POSIX.1\-2008 では、返り値が +NULL 以外になることが求められている。 +.SH 関連項目 +\fBerr\fP(3), \fBerrno\fP(3), \fBerror\fP(3), \fBperror\fP(3), \fBstrsignal\fP(3) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man7/aio.7 b/draft/man7/aio.7 new file mode 100644 index 00000000..80b2e3c3 --- /dev/null +++ b/draft/man7/aio.7 @@ -0,0 +1,418 @@ +.\" t +.\" Copyright (c) 2010 by Michael Kerrisk +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH AIO 7 2010\-10\-02 Linux "Linux Programmer's Manual" +.SH 名前 +aio \- POSIX 非同期 I/O の概要 +.SH 説明 +POSIX 非同期 (AIO) インターフェースを使うと、アプリケーションは、非同期 +に (つまり、バックグラウンドで) 実行されるI/O 操作を一つ以上発行できる +ようになる。アプリケーションは I/O 操作の完了の通知方法を選択することが +できる。選択できる通知方法は、シグナルの配送、スレッドの起動、通知を行 +わないである。 + +POSIX AIO インターフェースは以下の関数で構成されている。 +.TP 16 +\fBaio_read\fP(3) +読み出しリクエストをキューに入れる。 +\fBread\fP(2) の非同期版である。 +.TP +\fBaio_write\fP(3) +書き込みリクエストをキューに入れる。 +\fBwrite\fP(2) の非同期版である。 +.TP +\fBaio_fsync\fP(3) +ファイルディスクリプタに対して行われた I/O 操作の +同期 (sync) リクエストをキューに入れる。 +\fBfsync\fP(2) や \fBfdatasync\fP(2) の非同期版である。 +.TP +\fBaio_error\fP(3) +キューに入れられた I/O リクエストのエラー状態を取得する。 +.TP +\fBaio_return\fP(3) +完了した I/O リクエストの終了ステータスを取得する。 +.TP +\fBaio_suspend\fP(3) +指定された I/O リクエストの集合 (要素は一つ以上) が完了するまで、 +呼び出し側の実行を停止 (suspend) する。 +.TP +\fBaio_cancel\fP(3) +指定されたファイルディスクリプタに関する +完了していない I/O リクエストのキャンセルを試みる。 +.TP +\fBlio_listio\fP(3) +一回の関数呼び出しで複数の I/O リクエストをキューに入れる。 +.PP +\fIaiocb\fP ("非同期 I/O 制御ブロック (asynchronous I/O control block)") +構造体は、I/O 操作を制御するパラメータを定義する。この型の引き数は上記 +の全ての関数で使用されている。この構造体は以下の通りである。 +.PP +.in +4n +.nf +#include + +struct aiocb { + /* The order of these fields is implementation\-dependent */ + + int aio_fildes; /* File descriptor */ + off_t aio_offset; /* File offset */ + volatile void *aio_buf; /* Location of buffer */ + size_t aio_nbytes; /* Length of transfer */ + int aio_reqprio; /* Request priority */ + struct sigevent aio_sigevent; /* Notification method */ + int aio_lio_opcode; /* Operation to be performed; + lio_listio() only */ + + /* Various implementation\-internal fields not shown */ +}; + +/* Operation codes for \(aqaio_lio_opcode\(aq: */ + +enum { LIO_READ, LIO_WRITE, LIO_NOP }; + +.fi +.in +この構造体のフィールドは以下の通りである。 +.TP 16 +\fIaio_filedes\fP +I/O 操作の実行対象となるファイルディスクリプタ。 +.TP +\fIaio_offset\fP +I/O 操作を行うファイルオフセットを示す。 +.TP +\fIaio_buf\fP +読み出し操作、書き込み操作でデータ転送に使用されるバッファ。 +.TP +\fIaio_nbytes\fP +\fIaio_buf\fP が指すバッファのサイズ。 +.TP +\fIaio_reqprio\fP +このフィールドでは、呼び出したスレッドのリアルタイム優先度から +減算する値を指定する。この I/O リクエストの実行の優先度を +決定するために使用される (\fBpthread_setschedparam\fP(3) 参照)。 +指定する値は 0 と \fIsysconf(_SC_AIO_PRIO_DELTA_MAX)\fP が返す値の間で +なければならない。このフィールドは、ファイル同期操作では無視される。 +.TP +\fIaio_sigevent\fP +このフィールドは、非同期 I/O 操作が完了した際に呼び出し側に +どのように通知を行うかを指定する構造体である。 +\fIaio_sigevent.sigev_notify\fP に指定できる値は、 +\fBSIGEV_NONE\fP, \fBSIGEV_SIGNAL\fP, \fBSIGEV_THREAD\fP である。 +詳細は \fBsigevent\fP(7) を参照。 +.TP +\fIaio_lio_opcode\fP +実行される操作の種別。 +\fBlio_listio\fP(3) でのみ使用される。 +.PP +上記のリストにある標準の関数に加えて、GNU C ライブラリでは +以下に示す POSIX AIO API に対する拡張が提供されている。 +.TP 16 +\fBaio_init\fP(3) +glibc の POSIX AIO 実装の動作を調整するパラメータを設定する。 +.SH 注意 +使用前に制御ブロックバッファを 0 で埋めるのはよい考えである +(\fBmemset\fP(3) 参照)。I/O 操作が実行中の間は、制御ブロックバッファと +\fIaio_buf\fP が指すバッファを変更してはならない。I/O 操作が完了するまで、 +これらのバッファは有効な状態に保たなければならない。 + +同じ \fIaiocb\fP 構造体を使って、同時に複数の非同期の読み出し操作や +書き込み操作を行った場合に、どのような結果になるかは未定義である。 + +.\" http://lse.sourceforge.net/io/aio.html +.\" http://lse.sourceforge.net/io/aionotes.txt +.\" http://lwn.net/Articles/148755/ +現在の Linux では、POSIX AIO 実装は glibc によりユーザ空間で提供 +されている。このため、制限がいくつかあり、最も顕著なものは、I/O 操作を +実行する複数のスレッドの管理コストが高く、スケーラビリティに欠けること +である。しばらくの間、カーネルのステートマシンによる非同期 I/O の実装 +の作業が行われているが (\fBio_submit\fP(2), \fBio_setup\fP(2), +\fBio_cancel\fP(2), \fBio_destroy\fP(2), \fBio_getevents\fP(2) 参照)、 +この実装はまだ POSIX AIO 実装をカーネルシステムコールにより +再実装するほど成熟したものてはない。 +.SH エラー +.TP +\fBEINVAL\fP +\fIaiocb\fP 構造体の \fIaio_reqprio\fP フィールドが、0 より小さいか、 +\fIsysconf(_SC_AIO_PRIO_DELTA_MAX)\fP が返す上限よりも大きかった。 +.SH バージョン +POSIX AIO インターフェイスは glibc バージョン 2.1 以降で提供されている。 +.SH 準拠 +POSIX.1\-2001, POSIX.1\-2008. +.SH 例 +下記のプログラムは、コマンドライン引き数で指定された名前のファイルを +それぞれオープンし、得られたファイルディスクリプタに対するリクエストを +\fBaio_read\fP(3) を使ってキューに入れる。その後、このプログラムはループに +入り、定期的に \fBaio_error\fP(3) を使ってまだ実行中の各 I/O 操作を監視す +る。各 I/O リクエストは、シグナルの配送による完了通知が行われるように設 +定される。全ての I/O リクエストが完了した後、\fBaio_return\fP(3) を使って +それぞれのステータスを取得する。 + +\fBSIGQUIT\fP シグナル (control\-\e をタイプすると生成できる) を送ると、 +このプログラムは \fBaio_cancel\fP(3) を使って +完了していない各リクエストにキャンセル要求を送る。 + +以下はこのプログラムを実行した際の出力例である。 +この例では、標準入力に対して 2 つのリクエストを行い、 +"abc" と "x" という 2 行の入力を行っている。 + +.in +4n +.nf +$ \fB./a.out /dev/stdin /dev/stdin\fP +opened /dev/stdin on descriptor 3 +opened /dev/stdin on descriptor 4 +aio_error(): + for request 0 (descriptor 3): In progress + for request 1 (descriptor 4): In progress +\fBabc\fP +I/O completion signal received +aio_error(): + for request 0 (descriptor 3): I/O succeeded + for request 1 (descriptor 4): In progress +aio_error(): + for request 1 (descriptor 4): In progress +\fBx\fP +I/O completion signal received +aio_error(): + for request 1 (descriptor 4): I/O succeeded +All I/O requests completed +aio_return(): + for request 0 (descriptor 3): 4 + for request 1 (descriptor 4): 2 +.fi +.in +.SS プログラムのソース +\& +.nf +#include +#include +#include +#include +#include +#include + +#define BUF_SIZE 20 /* Size of buffers for read operations */ + +#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0) + +#define errMsg(msg) do { perror(msg); } while (0) + +struct ioRequest { /* Application\-defined structure for tracking + I/O requests */ + int reqNum; + int status; + struct aiocb *aiocbp; +}; + +static volatile sig_atomic_t gotSIGQUIT = 0; + /* On delivery of SIGQUIT, we attempt to + cancel all outstanding I/O requests */ + +static void /* Handler for SIGQUIT */ +quitHandler(int sig) +{ + gotSIGQUIT = 1; +} + +#define IO_SIGNAL SIGUSR1 /* Signal used to notify I/O completion */ + +static void /* Handler for I/O completion signal */ +aioSigHandler(int sig, siginfo_t *si, void *ucontext) +{ + write(STDOUT_FILENO, "I/O completion signal received\en", 31); + + /* The corresponding ioRequest structure would be available as + struct ioRequest *ioReq = si\->si_value.sival_ptr; + and the file descriptor would then be available via + ioReq\->aiocbp\->aio_fildes */ +} + +int +main(int argc, char *argv[]) +{ + struct ioRequest *ioList; + struct aiocb *aiocbList; + struct sigaction sa; + int s, j; + int numReqs; /* Total number of queued I/O requests */ + int openReqs; /* Number of I/O requests still in progress */ + + if (argc < 2) { + fprintf(stderr, "Usage: %s ...\en", + argv[0]); + exit(EXIT_FAILURE); + } + + numReqs = argc \- 1; + + /* Allocate our arrays */ + + ioList = calloc(numReqs, sizeof(struct ioRequest)); + if (ioList == NULL) + errExit("calloc"); + + aiocbList = calloc(numReqs, sizeof(struct aiocb)); + if (aiocbList == NULL) + errExit("calloc"); + + /* Establish handlers for SIGQUIT and the I/O completion signal */ + + sa.sa_flags = SA_RESTART; + sigemptyset(&sa.sa_mask); + + sa.sa_handler = quitHandler; + if (sigaction(SIGQUIT, &sa, NULL) == \-1) + errExit("sigaction"); + + sa.sa_flags = SA_RESTART | SA_SIGINFO; + sa.sa_sigaction = aioSigHandler; + if (sigaction(IO_SIGNAL, &sa, NULL) == \-1) + errExit("sigaction"); + + /* Open each file specified on the command line, and queue + a read request on the resulting file descriptor */ + + for (j = 0; j < numReqs; j++) { + ioList[j].reqNum = j; + ioList[j].status = EINPROGRESS; + ioList[j].aiocbp = &aiocbList[j]; + + ioList[j].aiocbp\->aio_fildes = open(argv[j + 1], O_RDONLY); + if (ioList[j].aiocbp\->aio_fildes == \-1) + errExit("open"); + printf("opened %s on descriptor %d\en", argv[j + 1], + ioList[j].aiocbp\->aio_fildes); + + ioList[j].aiocbp\->aio_buf = malloc(BUF_SIZE); + if (ioList[j].aiocbp\->aio_buf == NULL) + errExit("malloc"); + + ioList[j].aiocbp\->aio_nbytes = BUF_SIZE; + ioList[j].aiocbp\->aio_reqprio = 0; + ioList[j].aiocbp\->aio_offset = 0; + ioList[j].aiocbp\->aio_sigevent.sigev_notify = SIGEV_SIGNAL; + ioList[j].aiocbp\->aio_sigevent.sigev_signo = IO_SIGNAL; + ioList[j].aiocbp\->aio_sigevent.sigev_value.sival_ptr = + &ioList[j]; + + s = aio_read(ioList[j].aiocbp); + if (s == \-1) + errExit("aio_read"); + } + + openReqs = numReqs; + + /* Loop, monitoring status of I/O requests */ + + while (openReqs > 0) { + sleep(3); /* Delay between each monitoring step */ + + if (gotSIGQUIT) { + + /* On receipt of SIGQUIT, attempt to cancel each of the + outstanding I/O requests, and display status returned + from the cancellation requests */ + + printf("got SIGQUIT; canceling I/O requests: \en"); + + for (j = 0; j < numReqs; j++) { + if (ioList[j].status == EINPROGRESS) { + printf(" Request %d on descriptor %d:", j, + ioList[j].aiocbp\->aio_fildes); + s = aio_cancel(ioList[j].aiocbp\->aio_fildes, + ioList[j].aiocbp); + if (s == AIO_CANCELED) + printf("I/O canceled\en"); + else if (s == AIO_NOTCANCELED) + printf("I/O not canceled\en"); + else if (s == AIO_ALLDONE) + printf("I/O all done\en"); + else + errMsg("aio_cancel"); + } + } + + gotSIGQUIT = 0; + } + + /* Check the status of each I/O request that is still + in progress */ + + printf("aio_error():\en"); + for (j = 0; j < numReqs; j++) { + if (ioList[j].status == EINPROGRESS) { + printf(" for request %d (descriptor %d): ", + j, ioList[j].aiocbp\->aio_fildes); + ioList[j].status = aio_error(ioList[j].aiocbp); + + switch (ioList[j].status) { + case 0: + printf("I/O succeeded\en"); + break; + case EINPROGRESS: + printf("In progress\en"); + break; + case ECANCELED: + printf("Canceled\en"); + break; + default: + errMsg("aio_error"); + break; + } + + if (ioList[j].status != EINPROGRESS) + openReqs\-\-; + } + } + } + + printf("All I/O requests completed\en"); + + /* Check status return of all I/O requests */ + + printf("aio_return():\en"); + for (j = 0; j < numReqs; j++) { + ssize_t s; + + s = aio_return(ioList[j].aiocbp); + printf(" for request %d (descriptor %d): %ld\en", + j, ioList[j].aiocbp\->aio_fildes, (long) s); + } + + exit(EXIT_SUCCESS); +} +.fi +.SH 関連項目 +.ad l +\fBio_cancel\fP(2), \fBio_destroy\fP(2), \fBio_getevents\fP(2), \fBio_setup\fP(2), +\fBio_submit\fP(2), \fBaio_cancel\fP(3), \fBaio_error\fP(3), \fBaio_init\fP(3), +\fBaio_read\fP(3), \fBaio_return\fP(3), \fBaio_write\fP(3), \fBlio_listio\fP(3), +http://www.squid\-cache.org/~adrian/Reprint\-Pulavarty\-OLS2003.pdf +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/draft/man7/tcp.7 b/draft/man7/tcp.7 new file mode 100644 index 00000000..f31fd9e2 --- /dev/null +++ b/draft/man7/tcp.7 @@ -0,0 +1,695 @@ +.\" This man page is Copyright (C) 1999 Andi Kleen . +.\" Permission is granted to distribute possibly modified copies +.\" of this page provided the header is included verbatim, +.\" and in case of nontrivial modification author and date +.\" of the modification is added to the header. +.\" +.\" 2.4 Updates by Nivedita Singhvi 4/20/02 . +.\" Modified, 2004-11-11, Michael Kerrisk and Andries Brouwer +.\" Updated details of interaction of TCP_CORK and TCP_NODELAY. +.\" +.\" 2008-11-21, mtk, many, many updates. +.\" The descriptions of /proc files and socket options should now +.\" be more or less up to date and complete as at Linux 2.6.27 +.\" (other than the remaining FIXMEs in the page source below). +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH TCP 7 2012\-04\-23 Linux "Linux Programmer's Manual" +.SH 名前 +tcp \- TCP プロトコル +.SH 書式 +\fB#include \fP +.br +\fB#include \fP +.br +\fB#include \fP +.sp +\fBtcp_socket = socket(AF_INET, SOCK_STREAM, 0);\fP +.SH 説明 +これは RFC\ 793, RFC\ 1122, RFC\ 2001 で定義されている TCP プロトコルを NewReno 拡張と SACK +拡張を含めて実装したものである。 TCP は、 \fBip\fP(7) 上の二つのソケット間に、信頼性の高い、ストリーム指向の全二重 +(full\-duplex) 通信を提供する。 v4 と v6 の両方のバージョンの \fBip\fP(7) に対応している。 TCP +は、データが順序を守って到着すること、途中で失われたパケットが 再送されることを保証する。また、パケット単位にチェックサムを +生成、検査することで、転送エラーを検知する。 TCP はレコード境界 (record boundary) を保存しない。 + +新しく生成されたばかりの TCP ソケットは、 リモートアドレスかローカルアドレスがなく、 したがって詳細が完全に指定された状態ではない。 外部への +TCP 接続を生成するには、 \fBconnect\fP(2) を用いてもう一方の TCP ソケットへの接続を確立する。 +外部からの新たな接続を受けるには、まず \fBbind\fP(2) でソケットをローカルなアドレスとポートに結びつけ、次に \fBlisten\fP(2) +を呼んでソケットを接続待ち受け状態にする。 その後、到着した接続要求に対して \fBaccept\fP(2) を用い、ソケットを新しく生成する。 +\fBaccept\fP(2) または \fBconnect\fP(2) のコールが成功したソケットは、詳細が完全に指定された状態となり、 +データのやりとりが可能となる。接続待ち受け状態の (listening) ソケットや、 接続 (connect) +されていないソケットを通してデータをやりとりすることはできない。 + +Linux は RFC\ 1323 の TCP high performance 拡張をサポートしている。 これには、Protection +Against Wrapped Sequence Numbers (PAWS)、 ウィンドウスケーリング、タイムスタンプなどが含まれている。 +ウィンドウスケーリングを利用すると、遅延または帯域の大きな接続で、 (64K 以上の) 巨大な TCP ウィンドウを用いることが可能となる。 +これを用いるには、送受信のバッファサイズを大きくしなければならない。 システム全体に対するバッファサイズの変更は、ファイル +\fI/proc/sys/net/ipv4/tcp_wmem\fP と \fI/proc/sys/net/ipv4/tcp_rmem\fP +を用いて行うことができる。 また、個々のソケットのみを大きくしたい場合には、 \fBSO_SNDBUF\fP や \fBSO_RCVBUF\fP +ソケットオプションを用いて \fBsetsockopt\fP(2) コールを用いて設定すればよい。 + +\fBSO_SNDBUF\fP や \fBSO_RCVBUF\fP のメカニズムで宣言されるソケットバッファの最大サイズは、ファイル +\fI/proc/sys/net/core/rmem_max\fP や \fI/proc/sys/net/core/wmem_max\fP +で指定されたシステムとしての制限値を超えることはできない。 TCP は実際には \fBsetsockopt\fP(2) +コールが要求したバッファサイズの二倍を割り当てる。 そのため、この後で \fBgetsockopt\fP(2) コールを行うと、 +\fBsetsockopt\fP(2) で要求したバッファサイズとは異なる値が返る。 TCP +はこの余分な空間を、管理目的やカーネル内部の構造体に用いている。 \fI/proc\fP ファイルの値は、これらを反映し、実際の TCP +ウィンドウよりも大きな値となる。 各接続におけるソケットのバッファサイズ変更を有効にするには、 \fBlisten\fP(2) や +\fBconnect\fP(2) コールの前に設定しなければならない。 より詳しい情報は \fBsocket\fP(7) を見よ。 +.PP +TCP は緊急データ (urgent data) をサポートしている。緊急データは 何らかの重要なメッセージがデータストリームに含まれていること、 +そのデータをできるだけ早く処理すべきこと、を受信者に伝えるために用いられる。 緊急データを送るには、 \fBsend\fP(2) に \fBMSG_OOB\fP +オプションを指定する。 緊急データを受信すると、カーネルは \fBSIGURG\fP シグナルを送信する。送信先は \fBSIOCSPGRP\fP や +\fBFIOSETOWN\fP ioctl (や POSIX.1\-2001 で規定されている \fBfcntl\fP(2) \fBF_SETOWN\fP 操作) +を用いてそのソケットの「所有者」として設定された プロセスかプロセスグループである。 \fBSO_OOBINLINE\fP +ソケットオプションが有効になっていると、緊急データは 通常のデータストリームの中に混ぜて送られる (プログラムは下記の \fBSIOCATMARK\fP +ioctl を使って緊急データの場所を調べることができる)。 無効になっている場合には、 \fBrecv\fP(2) や \fBrecvmsg\fP(2) で +\fBMSG_OOB\fP フラグがセットされているときにのみ、緊急データを受信できる。 + +Linux 2.4 では多くの変更がなされ、 スループットとスケーリングが向上し、機能も高まった。 これらの機能には、ゼロコピー +\fBsendfile\fP(2)、 Explicit Congestion Notification、 TIME_WAIT ソケットの新しい管理法、 +keep\-alive ソケットオプション、 Duplicate SACK 拡張のサポートなどがある。 +.SS アドレスのフォーマット +TCP は IP の上層に構築されている (\fBip\fP(7) を参照)。 \fBip\fP(7) に定義されているアドレスフォーマットは TCP +にも適用される。 TCP は point\-to\-point の通信だけをサポートする。 ブロードキャストやマルチキャストはサポートしない。 +.SS "/proc インタフェース" +システム全体に対する TCP パラメータの設定には、 \fI/proc/sys/net/ipv4/\fP ディレクトリ内のファイルによりアクセスできる。 +さらに、IP に関連する \fI/proc\fP インタフェースのほとんどは TCP についても適用される。 \fBip\fP(7) を参照のこと。 +\fIBoolean\fP は整数値で、 0 以外の値 ("true") は対応するオプションが有効、 0 値 ("false") +は無効、であることを意味する。 +.TP +\fItcp_abc\fP (Integer; default: 0; Linux 2.6.15 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +RFC 3465 で定義されている Appropriate Byte Count (ABC) を制御する。 ABC は、部分的な ACK +に応じた輻輳ウィンドウ (\fIcwnd\fP) の増加をより緩やかにする方法である。 以下の値を指定できる。 +.RS +.IP 0 3 +ACK を受信する毎に \fIcwnd\fP を増やす (ABC なし)。 +.IP 1 +フルサイズのセグメントの ACK を受信する毎に \fIcwnd\fP を増やす。 +.IP 2 +ACK が遅延 ACK (delayed acknowledgment) を相殺するための 2 セグメントに 対する ACK の場合に、 \fIcwnd\fP +を 2 増やすことができる。 +.RE +.TP +\fItcp_abort_on_overflow\fP (Boolean; default: disabled; Linux 2.4 以降) +.\" Since 2.3.41 +接続を待ち受けているサービスが遅すぎて、受信についていけない場合に、 接続をリセットできるようにする。 +これを用いると、バーストによってオーバーフローが起こったときに、 接続を回復できるようになる。このオプションを用いるのは、 +受信デーモンを高速化できない場合に「限定する」こと。 このオプションを用いると、そのサーバに接続しているクライアント にとっては害になることがある。 +.TP +\fItcp_adv_win_scale\fP (integer; default: 2; Linux 2.4 以降) +.\" Since 2.4.0-test7 +バッファリングのオーバーヘッドの計算方法を、 \fItcp_adv_win_scale\fP が正の場合は +\fIbytes/2^tcp_adv_win_scale\fP に、 \fItcp_adv_win_scale\fP が負か 0 の場合は +\fIbytes\-bytes/2^(\-tcp_adv_win_scale)\fP とする。 + +ソケットの受信バッファ空間はアプリケーションとカーネルで共有される。 TCP はバッファの一部を TCP ウィンドウとして管理し、 +これを受信ウィンドウとして接続の他端に通知する。 空間の残りは「アプリケーション」バッファとして用いられ、 +スケジューリングやアプリケーションの遅延からネットワークを隔離する。 \fItcp_adv_win_scale\fP のデフォルト値は 2 であり、 +この場合アプリケーションバッファは全体の 1/4 になる。 +.TP +\fItcp_allowed_congestion_control\fP (String; default: see text; Linux 2.4.20 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +.\" FIXME How are the items in this delimited? Null bytes, spaces, commas? +非特権プロセスで利用できる輻輳制御アルゴリズムの選択肢を表示/設定する (\fBTCP_CONGESTION\fP ソケットオプションの説明を参照のこと)。 +このリストは \fItcp_available_congestion_control\fP で表示されるリストの部分集合となる。 +このリストのデフォルト値は、"reno" と \fItcp_congestion_control\fP のデフォルト設定をあわせたものとなる。 +.TP +\fItcp_available_congestion_control\fP (String; read\-only; Linux 2.4.20 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +.\" FIXME How are the items in this delimited? Null bytes, spaces, commas? +登録されている輻輳制御アルゴリズムのリストを表示する。 このリストに載っているものだけが、 +\fItcp_allowed_congestion_control\fP に表示される。 他の輻輳制御アルゴリズムがモジュールとして利用可能だが、 +モジュールがロードされていないこともある。 +.TP +\fItcp_app_win\fP (integer; default: 31; Linux 2.4 以降) +.\" Since 2.4.0-test7 +この変数は、TCP ウィンドウの何バイト分を バッファリングのオーバーヘッド用に予約するかを指定する。 + +.\" +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +そのウィンドウの \fIwindow/2^tcp_app_win\fP と mss の大きいほう (バイト単位) +がアプリケーションバッファとして予約される。 0 を指定すると一切予約領域を取らない。 +.TP +\fItcp_base_mss\fP (Integer; default: 512; Linux 2.6.17 以降) +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +パケット化レイヤの Path MTU discovery (MTU probing) で、 \fIsearch_low\fP の初期値と使用される値。 MTU +probing が有効な場合、この値はその接続の MSS の初期値となる。 +.TP +\fItcp_bic\fP (Boolean; default: disabled; Linux 2.4.27/2.6.6 から 2.6.13 まで) +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +BIC TCP 輻輳制御アルゴリズムを有効にする。 BIC\-TCP は送信側のみの変更で、 スケーラビリティと TCP 親和性 +(friendliness) の両方を提供しつつ、 大きなウィンドウの下での線形な RTT 公平性を保証するものである。 このプロトコルでは +additive increase (追加的な増加) と binary search increase (二分探索増加) といわれる二つの仕組みを +組み合わせている。輻輳ウィンドウが大きいときは、増分の大きい additive increase により、スケーラビリティを確保しながら 線形な RTT +公平性を保証する。 輻輳ウィンドウが小さいときには binary search increase により TCP 親和性を達成している。 +.TP +\fItcp_bic_low_window\fP (integer; default: 14; Linux 2.4.27/2.6.6 以降 2.6.13 まで) +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +BIC TCP が輻輳ウィンドウの調整を開始する閾値ウィンドウ (パケット単位) を設定する。この閾値を下回る場合、BIC TCP はデフォルトの +TCP Reno と 同じ動作をする。 +.TP +\fItcp_bic_fast_convergence\fP (Boolean; default: enabled; Linux 2.4.27/2.6.6 以降 2.6.13 まで) +BIC TCP が輻輳ウィンドウの変化により速く反応するようにする。 同じコネクションを共有する二つのフローが一つにまとまるのを +より速く行うようにする。 +.TP +\fItcp_congestion_control\fP (String; default: 説明参照; Linux 2.4.13 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +新規の接続で使用されるデフォルトの輻輳制御アルゴリズムを設定する。 "reno" アルゴリズムは常に利用可能だが、 +カーネル設定次第では別の選択肢が利用できることもある。 このファイルのデフォルト値はカーネル設定の一つとして設定される。 +.TP +\fItcp_dma_copybreak\fP (integer; default: 4096; Linux 2.6.24 以降) +システムに DMA コピーエンジンが存在し、カーネルで \fBCONFIG_NET_DMA\fP オプションが有効になっている場合に、 DMA +コピーエンジンにオフロードされるソケットの読み込みサイズの下限値 (バイト単位)。 +.TP +\fItcp_dsack\fP (Boolean; default: enabled; Linux 2.4 以降) +.\" Since 2.4.0-test7 +RFC\ 2883 の TCP Duplicate SACK のサポートを有効にする。 +.TP +\fItcp_ecn\fP (Boolean; default: disabled; Linux 2.4 以降) +.\" Since 2.4.0-test7 +RFC\ 2884 の Explicit Congestion Notification を有効にする。 +これを有効にすると、間違った振舞いをする古いルータが 経路の途中にあるような接続先に対して影響が生じ、 場合によっては接続が落ちるかもしれない。 +.TP +\fItcp_fack\fP (Boolean; default: enabled; Linux 2.2 以降) +.\" Since 2.1.92 +TCP Forward Acknowledgement のサポートを有効にする。 +.TP +\fItcp_fin_timeout\fP (integer; default: 60; Linux 2.2 以降) +.\" Since 2.1.53 +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +ソケットを強制的にクローズする前に、 最後の FIN パケットを待つ時間を秒単位で指定する。 これは厳密には TCP の仕様を満たしていないが、 DoS +攻撃 (denial of service attack) から身を守るために必要である。 Linux 2.2 ではデフォルト値は 180 であった。 +.TP +\fItcp_frto\fP (integer; default: 0; Linux 2.4.21/2.6 以降) +.\" Since 2.4.21/2.5.43 +F\-RTO を有効にする。F\-RTO は TCP 再送タイムアウト (RTO) からの 復旧性能を向上させたアルゴリズムである。 +この機能は無線環境で特に効果を発揮する。 無線環境では、通常は、中間ルータの輻輳ではなくランダムな無線の干渉 によりパケットロスが発生する。 詳細は +RFC\ 4138 を参照。 + +このファイルは以下のいずれかの値を取ることができる。 +.RS +.IP 0 3 +F\-RTO を無効にする。 +.IP 1 +基本版の F\-RTO アルゴリズムを有効にする。 +.IP 2 +そのフローで SACK を使用する場合、SACK 拡張版の F\-RTO を有効にする。 基本版の F\-RTO も SACK +が使用されている場合にも使用できるが、 基本版の場合には F\-RTO が SACK が有効になった TCP フローでの +パケット数計測と、相性が悪く相互干渉が起こる場面が存在する。 +.RE +.IP +Linu 2.6.22 より前では、このパラメータはブール値であり、 上記の 0 と 1 のみをサポートしていた。 +.TP +\fItcp_frto_response\fP (integer; default: 0; Linux 2.6.22 以降) +F\-RTO が TCP 再送タイムアウトが偽物だと検出した場合 (つまり、TCP がもっと長い再送タイムアウトを設定していれば +タイムアウトが避けられた場合)、 次にどうするかに関して選択肢がいくつかある。 以下の値を選択できる。 +.RS +.IP 0 3 +レートを元の半分にする。 滑らかで、保守的な反応を行い、RTT 1回分の時間後に 輻輳ウィンドウ (\fIcwnd\fP) とスロースタートの閾値 +(\fIssthresh\fP) が半分になる。 +.IP 1 +非常に保守的な反応。このオプションの使用は推奨されない。 反応が正しかった場合であっても、Linux TCP の他の部分と +うまく連携できないからである。 \fIcwnd\fP と \fIssthresh\fP は直ちに半分にされる。 +.IP 2 +積極的な反応。 不要と判明した輻輳制御の測定情報を取り消す (TCP がもっと注意深く扱うべき再送が失われる可能性を無視する)。 。 \fIcwnd\fP と +\fIssthresh\fP はタイムアウト前の値に戻される。 +.RE +.TP +\fItcp_keepalive_intvl\fP (integer; default: 75; Linux 2.4 以降) +.\" Since 2.3.18 +TCP keep\-alive のプローブを送る間隔 (秒単位)。 +.TP +\fItcp_keepalive_probes\fP (integer; default: 9; Linux 2.2 以降) +.\" Since 2.1.43 +TCP keep\-alive プローブの最大回数。 この回数だけ試しても接続先から反応が得られない場合は、 あきらめて接続を切断する。 +.TP +\fItcp_keepalive_time\fP (integer; default: 7200; Linux 2.2 以降) +.\" Since 2.1.43 +接続がアイドル状態になってから、keep\-alive プローブを送信するまでの時間を秒単位で指定する。 \fBSO_KEEPALIVE\fP +ソケットオプションが有効になっていないと keep\-alive は送られない。 デフォルト値は 7200 秒 (2 時間)。 keep\-alive +が有効になっている場合、 さらにおよそ 11 分 (75 秒間隔の 9 プローブ分) 経過するとアイドル状態の接続は終了させられる。 + +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +下層にある接続追跡機構やアプリケーションでのタイムアウトは、 もっとずっと短いかもしれない。 +.TP +\fItcp_low_latency\fP (Boolean; default: disabled; Linux 2.4.21/2.6 以降) +.\" Since 2.4.21/2.5.60 +有効にすると、TCP スタックはスループットを高くするよりも 遅延を少なくすることを優先して判断を行う。 +このオプションを無効にすると、スループットを高くすることが優先される。 このデフォルト値を変更した方がよいアプリケーションの例としては Beowulf +コンピュータクラスタが挙げられるだろう。 +.TP +\fItcp_max_orphans\fP (integer; default: see below; Linux 2.4 以降) +.\" Since 2.3.41 +システムが許容する、 orphan な (どのユーザファイルハンドルにもアタッチされていない) TCP ソケットの最大数。 +この数を越えると、orphan な接続はリセットされ、警告が表示される。 この制限が存在するのは、単純な使用不能 (denial\-of\-service) +攻撃を 防ぐために過ぎない。この値を小さくすることは推奨しない。 ネットワークの条件によっては、この数値を大きくしないといけないかもしれないが、 +orphan なソケットひとつあたり 64K 程度のスワップ不可能なメモリを消費することも注意せよ。 デフォルトの初期値はカーネルパラメータの +NR_FILE と等しい。 この初期デフォルト値はシステムのメモリに応じて調整される。 +.TP +\fItcp_max_syn_backlog\fP (integer; default: 下記参照; Linux 2.2 以降) +.\" Since 2.1.53 +接続してきているクライアントから ack を受信していない状態の接続リクエストをキューに置ける最大数。 +この数値を越えると、カーネルはリクエストを捨て始める。 デフォルトの値は 256 で、 システムに充分なメモリがある (128Mb 以上) 場合は +1024 になり、 メモリが非常に少ない場合 (32 Mb 以下) は 128 になる。 この数値を 1024 以上に増やしたい場合は、 +\fIinclude/net/tcp.h\fP の TCP_SYNQ_HSIZE を +TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog のように修正し、 カーネルを再コンパイルすることを奨める。 +.TP +\fItcp_max_tw_buckets\fP (integer; default: 下記参照; Linux 2.4 以降) +.\" Since 2.3.41 +システムが許容する TIME_WAIT 状態にあるソケットの最大数。 この制限が存在するのは、 単純な使用不能 (denial\-of\-service) +攻撃を防ぐために過ぎない。 デフォルト値は NR_FILE*2 で、システムのメモリに応じて調整される。 +この数値を越えると、そのようなソケットはクローズされ、警告が表示される。 +.TP +\fItcp_moderate_rcvbuf\fP (Boolean; default: enabled; Linux 2.4.17/2.6.7 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +有効にすると、TCP は受信バッファの自動調整を行う。 具体的には、 (\fItcp_rmem[2]\fP を超えない範囲で) +バッファの大きさを自動的に変化させ、 その経路で最大のスループットを達成するのに必要な大きさに合わせようとする。 +.TP +\fItcp_mem\fP (Linux 2.4 以降) +.\" Since 2.4.0-test7 +これは 3 つの整数 [low, pressure, high] からなるベクトル値である。 これらは TCP がメモリ使用量を追跡するために用いられる +(使用量はシステムのページサイズ単位で計測される)。 デフォルトはブート時に利用できるメモリの量から計算される。 (実際には、TCP は \fIlow +memory\fP のみを使用する。値は 32ビットシステムでは約 900 メガバイトに制限される。 64 ビットシステムではこの制限はない。) +.RS +.TP 10 +\fIlow\fP +TCP は、グローバルにアロケートしたページがこの数値以下の場合は、 メモリアロケーションを調整しない。 +.TP +\fIpressure\fP +TCP がアロケートしたメモリがこの数値分のページ数を越えると、 TCP はメモリ消費を抑えるようになる。 アロケートしたページ数が \fIlow\fP +以下になると、このメモリ圧迫状態から脱する。 +.TP +\fIhigh\fP +TCP がグローバルに割り当てるページ数の最大値。 この値はカーネルによって課されるあらゆる制限よりも優先される。 +.RE +.TP +\fItcp_mtu_probing\fP (integer; default: 0; Linux 2.6.17 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +このパラメータは、TCP のパケット化レイヤの Path MTU discovery を制御する。 このファイルには以下の値を設定できる。 +.RS +.IP 0 3 +無効にする。 +.IP 1 +デフォルトでは無効だが、ICMP ブラックホールが検出された場合は有効にする。 +.IP 2 +常に有効にする。 MSS の初期値として \fItcp_base_mss\fP が使用される。 +.RE +.TP +\fItcp_no_metrics_save\fP (Boolean; default: disabled; Linux 2.6.6 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +デフォルトでは、TCP は接続クローズ時に各種の接続パラメータを ルートキャッシュ (route cache) に保存し、近い将来に接続が確立された際に +これらの情報を初期状態として使用できるようになっている。 通常は、これにより全体として性能が向上するが、 時として性能の劣化を引き起こすこともある。 +\fItcp_no_metrics_save\fP を有効にすると、TCP は接続クローズ時に接続パラメータをキャッシュ しなくなる。 +.TP +\fItcp_orphan_retries\fP (integer; default: 8; Linux 2.4 以降) +.\" Since 2.3.41 +こちらからクローズした接続について、 先方をプローブする最大試行数。 +.TP +\fItcp_reordering\fP (integer; default: 3; Linux 2.4 以降) +.\" Since 2.4.0-test7 +TCP パケットストリームでパケット順序の逆転が発生しただけであり、 パケットロスが起こったとはみなさない、パケット数の最大値。 +この値を超えてパケットの順序逆転が起こると、パケットロスが生じたと みなし、slow start に入る。 この数値は変更しないほうが良い。 +これは、接続中のパケットの並び替えによって生じる 不必要な速度低下や再送を最小化するように設計された、 パケット並び替え (packet +reordering) の検知メトリックなのである。 +.TP +\fItcp_retrans_collapse\fP (Boolean; default: enabled; Linux 2.2 以降) +.\" Since 2.1.96 +再送の際にフルサイズのパケットを送ろうとする。 +.TP +\fItcp_retries1\fP (integer; default: 3; Linux 2.2 以降) +.\" Since 2.1.43 +普通に確立されている接続上に、 TCP がネットワーク層を巻き込まずに再送を試みる回数。 再送がこの回数を越えると、まず最初に、 +新しい再送を送る前に可能ならネットワーク層に経路を更新させる。 デフォルトは RFC が指定している最少数である 3。 +.TP +\fItcp_retries2\fP (integer; default: 15; Linux 2.2 以降) +.\" Since 2.1.43 +確立状態の接続に、この回数 TCP パケットの再送信を 行なってもだめな場合はあきらめる。 デフォルト値は 15 で、これは +(再送のタイムアウトに依存するが) およそ 13〜30 分程度の期間に対応する。 RFC\ 1122 は最小の限界を 100 秒と置いているが、 +これはたいていの場合には短すぎると思われる。 +.TP +\fItcp_rfc1337\fP (Boolean; default: disabled; Linux 2.2 以降) +.\" Since 2.1.90 +TCP の動作を RFC\ 1337 に準拠させる。 無効にすると、TIME_WAIT 状態のときに RST が受信された場合、 TIME_WAIT +期間の終了を待たずにそのソケットを直ちにクローズする。 +.TP +\fItcp_rmem\fP (Linux 2.4 以降) +.\" Since 2.4.0-test7 +これは 3 つの整数 [min, default, max] からなるベクトル値である。 これらは TCP +が受信バッファサイズを調整するために用いられる。 TCP は、システムで利用できるメモリに応じて、 受信バッファのサイズをこれらの変数の範囲で +以下に示すデフォルトから動的に調整する。 +.RS +.TP 10 +\fImin\fP +各 TCP ソケットが用いる受信バッファの最小サイズ。 デフォルト値はシステムのページサイズである (Linux 2.4 では、デフォルト値は 4K +バイトで、 メモリの少ないシステムでは \fBPAGE_SIZE\fP バイトに減らされる)。 この値は、メモリ圧迫モードにおいても、 +このサイズの割り当てが成功することを保証するために用いられる。 これは、 \fBSO_RCVBUF\fP +を用いてソケットの最低受信バッファサイズを宣言する際には用いられない。 +.TP +\fIdefault\fP +TCP ソケットの受信バッファのデフォルトサイズ。 この値は、すべてのプロトコルに対して定義されている、 +ジェネリックなグローバルのデフォルトバッファサイズ \fInet.core.rmem_default\fP より優先される。 デフォルト値は 87380 +バイトである (Linux 2.4 では、メモリの少ないシステムの場合 43689 まで減らされる)。 大きな受信バッファサイズが必要な場合は、 +この値を増やすべきである (すべてのソケットに影響する)。 大きな TCP ウィンドウを用いるには、 +\fInet.ipv4.tcp_window_scaling\fP を有効にしておかなければならない (デフォルトは有効)。 +.TP +\fImax\fP +各 TCP ソケットで用いる受信バッファの最大サイズ。 この値よりもグローバルの \fInet.core.rmem_max\fP が優先される。 これは、 +\fBSO_RCVBUF\fP を用いてソケットの受信バッファサイズ制限を宣言する際には用いられない。 デフォルト値は以下の式で計算される。 + + max(87380, min(4MB, \fItcp_mem\fP[1]*PAGE_SIZE/128)) + +(Linux 2.4 では、デフォルト値は 87380*2 バイトで、 メモリの少ないシステムでは 87380 まで減らされる。) +.RE +.TP +\fItcp_sack\fP (Boolean; default: enabled; Linux 2.2 以降) +.\" Since 2.1.36 +RFC\ 2018 の TCP Selective Acknowledgements を有効にする。 +.TP +\fItcp_slow_start_after_idle\fP (Boolean; default: enabled; Linux 2.6.18 以降) +.\" The following is from 2.6.28-rc4: Documentation/networking/ip-sysctl.txt +有効にすると、RFC 2861 の動作が行われ、 アイドル時間経過後に輻輳ウィンドウをタイムアウトさせる。 アイドル時間は現在の RTO +(再送タイムアウト) で定義される。 無効にすると、輻輳ウィンドウはアイドル時間経過後もタイムアウトされない。 +.TP +\fItcp_stdurg\fP (Boolean; default: disabled; Linux 2.2 以降) +.\" Since 2.1.44 +.\" RFC 793 was ambiguous in its specification of the meaning of the +.\" urgent pointer. RFC 1122 (and RFC 961) fixed on a particular +.\" resolution of this ambiguity (unfortunately the "wrong" one). +このオプションを有効にすると、 TCP 緊急ポインタ (urgent\-pointer) フィールドを RFC\ 1122 に従った解釈を行う。 +この解釈に従うと、緊急ポインタは緊急データの最後のバイトを指す。 このオプションを無効にすると、緊急ポインタの解釈が BSD 互換の方法で 行われる: +緊急ポインタは緊急データの後の最初のバイトを指す。 このオプションを有効にすると、相互運用性に問題が生じるかもしれない。 +.TP +\fItcp_syn_retries\fP (integer; default: 5; Linux 2.2 以降) +.\" Since 2.1.38 +アクティブな TCP 接続に初期 SYN の再送を試みる最大回数。 この数値は 255 よりも大きくすべきではない。 デフォルトの値は 5 で、およそ +180 秒に対応する。 +.TP +\fItcp_synack_retries\fP (integer; default: 5; Linux 2.2 以降) +.\" Since 2.1.38 +passive な TCP 接続の SYN/ACK セグメントで再送を試みる最大数。 この数値は 255 よりも大きくすべきではない。 +.TP +\fItcp_syncookies\fP (Boolean; Linux 2.2 以降) +.\" Since 2.1.43 +TCP syncookies を有効にする。カーネルは \fBCONFIG_SYNCOOKIES\fP をつけてコンパイルしておかなければならない。 +ソケットのバックログキューがオーバーフローすると、 syncookies が送信される。 syncookies 機能は、SYN flood +攻撃からソケットを守ろうとする。 これはいずれにしても、最終手段として用いるべきである。 これは TCP プロトコルに違反しており、 TCP +拡張のような、TCP の他の部分と衝突してしまう。 クライアントやリレーで問題が起こることもある。 +過負荷や設定間違いによって負荷の大きな状態にあるサーバを調整して救うための 機構とみなすべきではない。 そのような用途には、代わりに +\fItcp_max_syn_backlog\fP, \fItcp_synack_retries\fP, \fItcp_abort_on_overflow\fP +などの使用を考えること。 +.TP +\fItcp_timestamps\fP (Boolean; default: enabled; Linux 2.2 以降) +.\" Since 2.1.36 +RFC\ 1323 の TCP timestamps を有効にする。 +.TP +\fItcp_tso_win_divisor\fP (integer; default: 3; Linux 2.6.9 以降) +このパラメータは、一つの TCP Segmentation Offload (TSO) フレームで 消費できる輻輳ウィンドウの割合 (パーセント) +を制御する。 バースト性と、どれだけ大きな TSO フレームを構築するかのはトレードオフであり、 このパラメータはその度合いを設定する。 +.TP +\fItcp_tw_recycle\fP (Boolean; default: disabled; Linux 2.4 以降) +.\" Since 2.3.15 +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +TIME_WAIT ソケットの素早い再利用を有効にする。 このオプションを有効にすると、 NAT (ネットワークアドレス変換) +を用いていると問題が生じるので、 あまり推奨しない。 +.TP +\fItcp_tw_reuse\fP (Boolean; default: disabled; Linux 2.4.19/2.6 以降) +.\" Since 2.4.19/2.5.43 +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +プロトコルの面から見て問題ない場合に新規コネクションに TIME_WAIT 状態のソケットを再利用することを許可する。技術的に詳しい人の助言や +要請なしにこのオプションを変更すべきではない。 +.TP +\fItcp_vegas_cong_avoid\fP (Boolean; default: disabled; Linux 2.2 から 2.6.13 まで) +.\" Since 2.1.8; removed in 2.6.13 +.\" +.\" The following is from 2.6.12: Documentation/networking/ip-sysctl.txt +TCP Vegas 輻輳制御アルゴリズムを有効にする。 TCP Vegas は帯域を推測することで輻輳の起こり始めを予想するように TCP +の送信側のみに変更を加えたものである。 TCP Vegas は輻輳ウィンドウを修正することで、送信レートを調整する。 TCP Vegas は TCP +Reno と比べてパケットロスは少ないが、 TCP Reno ほど積極的な挙動はしない。 +.TP +\fItcp_westwood\fP (Boolean; default: disabled; Linux 2.4.26/2.6.3 から 2.6.13 まで) +TCP Westwood+ 輻輳制御アルゴリズムを有効にする。 TCP Westwood+ は TCP 輻輳制御の性能を最適化するように TCP +Reno の プロトコルスタックの送信側のみに修正を加えたものである。 輻輳が起こった後で、輻輳ウィンドウや slow start の閾値を +通信両端間の帯域の推測に基づいて設定する。 この推測を使って、TCP Westwood+ は輻輳が発生した時に使っていた 帯域を考慮に入れた slow +start の閾値と輻輳ウィンドウを設定する。 TCP Westwood+ は、有線ネットワークにおける TCP Reno の公平性 +(fairness) と、無線リンクでのスループットを大きく向上する。 +.TP +\fItcp_window_scaling\fP (Boolean; default: enabled; Linux 2.2 以降) +.\" Since 2.1.36 +RFC\ 1323 の TCP ウィンドウスケーリングを有効にする。 この機能を用いると、接続先が対応していれば、 TCP 接続で大きな (64K +以上の) ウィンドウが使えるようになる。 通常は TCP ヘッダのウインドウ長フィールドは 16 ビットなので、 ウィンドウサイズは 64K +バイト以下に限られる。 もっと大きなウィンドウを使いたい場合は、 アプリケーションはソケットバッファのサイズを増やして、 +ウィンドウスケーリングのオプションを利用すればよい。 \fItcp_window_scaling\fP を無効にしていると、 TCP +は他端との接続設定の際に、 ウィンドウスケーリングのネゴシエーションを行なわない。 +.TP +\fItcp_wmem\fP (Linux 2.4 以降) +.\" Since 2.4.0-test7 +これは 3 つの整数 [min, default, max] からなるベクトル値である。 これらは TCP +が送信バッファサイズを調整するために用いられる。 TCP は、システムで利用できるメモリに応じて、送信バッファのサイズを +これらの変数の範囲で以下に示すデフォルトから動的に調整する。 +.RS +.TP 10 +\fImin\fP +各 TCP ソケットが用いる送信バッファの最小サイズ。 デフォルト値はシステムのページサイズである (Linux 2.4 では、デフォルト値は 4K +である)。 この値は、メモリ圧迫モードにおいても、 このサイズ以下の割り当てが成功することを保証するために用いられる。 これは、 +\fBSO_SNDBUF\fP を用いてソケットの最低送信バッファサイズを宣言する際には用いられない。 +.TP +\fIdefault\fP +.\" True in Linux 2.4 and 2.6 +TCP ソケットの送信バッファのデフォルトサイズ。 この値は、すべてのプロトコルに対して定義されている、 +ジェネリックなグローバルのデフォルトバッファサイズ \fI/proc/sys/net/core/wmem_default\fP より優先される。 +デフォルト値は 16K バイトである。 大きな送信バッファサイズが必要な場合は、 この値を増やすべきである (すべてのソケットに影響する)。 大きな +TCP ウィンドウを用いるには、 \fI/proc/sys/net/ipv4/tcp_window_scaling\fP を 0 以外の値 (デフォルト値) +にしておかなければならない。 +.TP +\fImax\fP +各 TCP ソケットで用いる送信バッファの最大サイズ。 この値よりも \fI/proc/sys/net/core/wmem_max\fP が優先される。 +これは \fBSO_SNDBUF\fP を用いてソケットの送信バッファサイズ制限を宣言する際には用いられない。 デフォルト値は以下の式で計算される。 + + max(65536, min(4MB, \fItcp_mem\fP[1]*PAGE_SIZE/128)) + +(Linux 2.4 では、デフォルト値は 128K バイトで、 メモリの少ないシステムでは 64K にまで減らされる。) +.RE +.TP +\fItcp_workaround_signed_windows\fP (Boolean; default: disabled; Linux 2.6.26 以降) +有効にすると、ウィンドウスケーリングオプションを受信しないのは、 接続相手の TCP が壊れていると考え、ウィンドウを符号付きの量とみなす。 +無効にすると、接続相手からウィンドウスケーリングオプションを受信しなかった 場合であっても、接続相手の TCP が壊れているとはみなさない。 +.SS ソケットオプション +.\" or SOL_TCP on Linux +.\" FIXME Document TCP_CONGESTION (new in 2.6.13) +TCP ソケットのオプションは、 オプションレベル引数に \fIIPPROTO_TCP\fP を指定した \fBsetsockopt\fP(2) で設定でき、 +\fBgetsockopt\fP(2) で取得できる。 さらに、ほとんどの \fBIPPROTO_IP\fP ソケットオプションも TCP +ソケットに対して有効である。詳細は \fBip\fP(7) を見よ。 +.TP +\fBTCP_CORK\fP (Linux 2.2 以降) +.\" precisely: since 2.1.127 +セットされると、 partial フレームを送信しない。 このオプションが解除されると、 キューイングされた partial フレームが送られる。これは +\fBsendfile\fP(2) を呼ぶ前にヘッダを前置したり、 スループットを最適化したい場合に便利である。 現在の実装では、 \fBTCP_CORK\fP +で出力を抑えることができる時間の上限は 200 ミリ秒である。 この上限に達すると、キューイングされたデータは自動的に送信される。 Linux +2.5.71 以降においてのみ、このオプションを \fBTCP_NODELAY\fP と同時に用いることができる。 +移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_DEFER_ACCEPT\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.38 +これを用いると、リスナはデータがソケットに到着した時のみ目覚めるようになる。 整数値 (秒) をとり、 TCP +が接続を完了しようと試みる回数を制限できる。 移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_INFO\fP (Linux 2.4 以降) +このソケットの情報を収集するのに用いる。 カーネルは \fI/usr/include/linux/tcp.h\fP ファイルで定義されている \fIstruct +tcp_info\fP を返す。 移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_KEEPCNT\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.18 +接続を落とす前に TCP が試みる keepalive プローブの最大回数。 移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_KEEPIDLE\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.18 +この時間 (秒単位) を越えて接続がアイドル状態に留まっていると、 このソケットに \fBSO_KEEPALIVE\fP +ソケットオプションが設定されている場合、 TCP は keepalive プローブを送りはじめる。 +移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_KEEPINTVL\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.18 +各 keepalive プローブの間隔 (秒単位)。 移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_LINGER2\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.41 +orphan された FIN_WAIT2 状態のソケットの寿命。 このオプションを用いると、システム全体に適用されるファイル +\fI/proc/sys/net/ipv4/tcp_fin_timeout\fP の値を、このソケットに対してのみ変更できる。 \fBsocket\fP(7) +レベルのオプション \fBSO_LINGER\fP と混同しないこと。 移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_MAXSEG\fP +.\" Present in Linux 1.0 +.\" FIXME +.\" Document TCP_MD5SIG, added in Linux 2.6.20, +.\" Needs CONFIG_TCP_MD5SIG +.\" From net/inet/Kconfig +.\" bool "TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)" +.\" RFC2385 specifies a method of giving MD5 protection to TCP sessions. +.\" Its main (only?) use is to protect BGP sessions between core routers +.\" on the Internet. +.\" +.\" There is a TCP_MD5SIG option documented in FreeBSD's tcp(4), +.\" but probably many details are different on Linux +.\" Authors were yoshfuji@linux-ipv6.org and Dave Muller +.\" http://thread.gmane.org/gmane.linux.network/47490 +.\" http://www.daemon-systems.org/man/tcp.4.html +.\" http://article.gmane.org/gmane.os.netbsd.devel.network/3767/match=tcp_md5sig+freebsd +送出 TCP パケットの最大セグメントサイズ。 Linux 2.2 以前と Linux +2.6.28 以降では、このオプションを接続確立の前に設定すると、初期パケット +で他端にアナウンスする MSS の値も変化する。インターフェースの MTU より +も大きな (あるいは大きくなってしまった) 値は効果を持たない。 また TCP +は、この値よりも最小・最大の制限の方を優先する。 +.TP +\fBTCP_NODELAY\fP +.\" Present in Linux 1.0 +設定すると Nagle アルゴリズムを無効にする。 すなわち、データ量が少ない場合でも 各セグメントは可能な限り早く送信される。 設定されていないと、 +送信する分だけ溜まるまでデータはバッファされ、 小さなパケットを頻繁に送らずにすみ、 ネットワークを有効に利用できる。 このオプションは +\fBTCP_CORK\fP により上書きされる。しかしながら、 \fBTCP_CORK\fP が設定されている場合であっても、このオプションを設定すると、 +送信待ちの出力を明示的に掃き出す (flush) ことになる。 +.TP +\fBTCP_QUICKACK\fP (Linux 2.4.4 以降) +.\" FIXME Document TCP_USER_TIMEOUT (new in 2.6.37) +.\" See commit dca43c75e7e545694a9dd6288553f55c53e2a3a3 +設定されていると quickack モードを有効にし、クリアされると無効にする。 通常の TCP 動作では ack は必要に応じて遅延されるのに対し、 +quickack モードでは ack はすぐに送信される。 このフラグは永続的なものではなく、 quickack +モードから/モードへ切り替えるためのものである。 これ以降の TCP プロトコルの動作によっては、 内部のプロトコル処理や、遅延 ack +タイムアウトの発生、 データ転送などの要因によって、 再び quickack から出たり入ったりする。 +移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_SYNCNT\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.18 +接続の試行を中止させる前に TCP が送る SYN 再送数を設定する。 これは 255 より大きくはできない。 +移植性の必要なプログラムではこのオプションを用いるべきではない。 +.TP +\fBTCP_WINDOW_CLAMP\fP (Linux 2.4 以降) +.\" Precisely: since 2.3.41 +広報するウィンドウのサイズをこの値に固定する。 カーネルによって最小サイズは SOCK_MIN_RCVBUF/2 に制限されている。 +このオプションは移植性の必要なコードでは用いるべきでない。 +.SS "ソケット API" +TCP は帯域外データ (out\-of\-band data) を限定的にサポートしており、 (1 バイトの) 緊急データという形である。 つまり +Linux においては、 接続先が (新しいやり方の) 帯域外データを送ってきた場合、 (古いやり方の) +緊急データは通常のデータとしてストリームに挿入されることになる (これは \fBSO_OOBINLINE\fP がセットされている場合でも同様である)。 +これは BSD ベースのスタックとは異なる。 +.PP +Linux は、デフォルトでは urgent ポインタフィールドの解釈に BSD 互換の方法を用いる。これは RFC\ 1122 に反しているが、 +他のスタックと同時に動作させるにはやむを得ない。これは \fI/proc/sys/net/ipv4/tcp_stdurg\fP によって変更できる。 + +\fBrecv\fP(2) の \fBMSG_PEEK\fP フラグを使うと、帯域外データを覗き見することができる。 + +Linux 2.4 以降では、 \fBrecv\fP(2) (や \fBrecvmsg\fP(2)) の \fIflags\fP 引き数に \fBMSG_TRUNC\fP +を使うことができる。 このフラグを指定すると、受信データは、呼び出し元から渡されたバッファ にコピーされて返されるのではなく、廃棄されるようになる。 +Linux 2.4.4 以降では、 \fBMSG_PEEK\fP を、帯域外データを受信するための \fBMSG_OOB\fP +と組み合わせて使った場合にも、これと同じ効果を持つようになっている。 +.SS ioctl +以下の \fBioctl\fP(2) 呼び出しは \fIvalue\fP に情報を入れて返す。 +正しい書式は以下の通り。 +.PP +.RS +.nf +\fBint\fP\fI value\fP\fB;\fP +\fIerror\fP\fB = ioctl(\fP\fItcp_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 +受信バッファのキューにある、まだ読んでいないデータの量を返す。ソケットは +LISTEN 状態にあってはならず、さもないとエラー (\fBEINVAL\fP) が返る。 +\fBSIOCINQ\fP は \fI\fP で定義されている。 +代わりに、\fI\fP で定義されている、同義語の \fBFIONREAD\fP +を使うこともできる。 +.TP +\fBSIOCATMARK\fP +受信データストリームが緊急マークの位置であれば、真を返す (つまり \fIvalue\fP が 0 以外)。 + +\fBSO_OOBINLINE\fP ソケットオプションが設定されていて、 \fBSIOCATMARK\fP +が真を返した場合、次のソケットからの読み込みでは緊急データが 返される。 \fBSO_OOBINLINE\fP ソケットオプションが設定されておらず、 +\fBSIOCATMARK\fP が真を返した場合、次のソケットからの読み込みでは緊急データに 続くデータが返される (実際に緊急データを読み込むには +\fBrecv(MSG_OOB)\fP とフラグをつける必要がある)。 + +データの一回の読み込みでは緊急マークを跨がっての読み込みは行われない。 アプリケーションが緊急データの存在を (\fIexceptfds\fP +引き数を使って) \fBselect\fP(2) 経由または \fBSIGURG\fP シグナルの配送を通じて知らされた場合、 \fBSIOCATMARK\fP +のチェックと読み込み (何バイト読み込み要求をしてもよい) を \fBSIOCATMARK\fP +が偽を返さなくなるまで繰り返し行うことで、緊急マークの位置まで 読み進めることができる。 +.TP +\fBSIOCOUTQ\fP +.\" FIXME http://sources.redhat.com/bugzilla/show_bug.cgi?id=12002, +.\" filed 2010-09-10, may cause SIOCOUTQ to be defined in glibc headers +ソケットの送信キューに残っている未送信データの量を返す。ソケットは LISTEN 状 +態にあってはならない。 LISTEN 状態の場合にはエラー (\fBEINVAL\fP) となる。 +\fBSIOCOUTQ\fP は \fI\fP で定義されている。 +代わりに、\fI\fP で定義されている、同義語の \fBTIOCOUTQ\fP を +使うこともできる。 +.SS エラー処理 +ネットワークエラーが起こると、 TCP はパケットの再送を試みる。 何回かやっても成功しなければ、この接続に対して \fBETIMEOUT\fP +エラーか最後に受信したエラーが返される。 +.PP +アプリケーションによっては、もっと早くエラーを知らせてほしい場合がある。 これには \fBIPPROTO_IP\fP レベルの \fBIP_RECVERR\fP +ソケットオプションを用いると良い。このオプションが有効になっていると、 到着したエラーはすべてただちにユーザープログラムに渡される。 +このオプションは慎重に用いること \(em ルーティングの変更など、 通常ありうるネットワーク状態に対して TCP をより脆弱にしてしまう。 +.SH エラー +.TP +\fBEAFNOTSUPPORT\fP +\fIsin_family\fP に渡されたソケットアドレスのタイプが \fBAF_INET\fP ではなかった。 +.TP +\fBEPIPE\fP +接続先が予期しなかったかたちでソケットをクローズした。 またはシャットダウンされたソケットに読み込みが実行された。 +.TP +\fBETIMEDOUT\fP +接続先が、何回かデータを再送しても反応しない。 +.PP +\fBip\fP(7) で定義されているエラーや、ジェネリックなソケット層におけるエラーも TCP に返されることがある。 +.SH バージョン +Explicit Congestion Notification、zero\-copy の \fBsendfile\fP(2)、 並び替えのサポート、SACK +拡張 (DSACK) などのサポートは 2.4 で導入された。 フォワード確認 (FACK)、TIME_WAIT リサイクル、接続ごとの +keepalive に対するソケットオプションは 2.3 で導入された。 +.SH バグ +まだ説明されていないエラーがある。 +.br +.\" Only a single Linux kernel version is described +.\" Info for 2.2 was lost. Should be added again, +.\" or put into a separate page. +.\" .SH AUTHORS +.\" This man page was originally written by Andi Kleen. +.\" It was updated for 2.4 by Nivedita Singhvi with input from +.\" Alexey Kuznetsov's Documentation/networking/ip-sysctl.txt +.\" document. +IPv6 に関する記述がない。 +.SH 関連項目 +\fBaccept\fP(2), \fBbind\fP(2), \fBconnect\fP(2), \fBgetsockopt\fP(2), \fBlisten\fP(2), +\fBrecvmsg\fP(2), \fBsendfile\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBip\fP(7), +\fBsocket\fP(7) +.sp +RFC\ 793: TCP の仕様。 +.br +RFC\ 1122: TCP の要求事項と Nagle アルゴリズムの記述。 +.br +RFC\ 1323: TCP のタイムスタンプ・ウィンドウスケーリング各オプション。 +.br +RFC\ 1337: TIME_WAIT assassination hazard に関する説明。 +.br +RFC\ 3168: Explicit Congestion Notification に関する説明。 +.br +RFC\ 2581: TCP 輻輳制御アルゴリズム。 +.br +RFC\ 2018 と RFC\ 2883: SACK とその拡張。 +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 -- 2.11.0