.\" Copyright (c) 1983, 1990, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)accept.2 8.2 (Berkeley) 12/11/93 .\" %FreeBSD: src/lib/libc/sys/accept.2,v 1.30 2004/07/02 23:52:13 ru Exp % .\" .\" $FreeBSD$ .Dd December 11, 1993 .Dt ACCEPT 2 .Os .Sh 名称 .Nm accept .Nd ソケット上の接続を受け入れる .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/socket.h .Ft int .Fn accept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen" .Sh 解説 引数 .Fa s は .Xr socket 2 で作成され、 .Xr bind 2 でアドレスにバインドされ、 .Xr listen 2 も済ませて接続を待ち受けているソケットです。 .Fn accept システムコールは、待ち行列上の最初の接続要求を取り出し、 新しいソケットを作成し、オリジナルのソケット .Fa s から .Dv O_NONBLOCK プロパティの状態を継承した そのソケットへ新しいファイル記述子を割り当てます。 .Pp 接続要求が待ち行列上に存在せず、 しかもオリジナルのソケットが非ブロッキングとマークされていない場合、 .Fn accept は接続要求があるまで呼び出し側をブロックします。 オリジナルのソケットが非ブロッキングとマークされており、 しかも待ち行列に接続要求が存在しない場合、 .Fn accept は後述のようにエラーを返します。 接続が成立したソケットは、それ以上の接続を受け入れるために 使用できません。 オリジナルのソケット .Fa s は開いたままです。 .Pp 引数 .Fa addr は結果の引数で、 通信レイヤに既知の接続エンティティのアドレスで埋められます。 .Fa addr 引数の正確な形式は通信が行われるドメインで決まります。 アドレス情報が要望されない場合には、 .Fa addr にヌルポインタを指定することができます。 この場合は .Fa addrlen は使用されず、これもヌルであるべきです。 そうでない場合には .Fa addrlen は、値と結果の引数です。 これは最初は .Fa addr が指す空間のサイズを含んでいなければなりません。 戻り時には、返されるアドレスの実際の長さ (バイト単位) を含むことになります。 この呼び出しは、コネクションをベースとしたソケットタイプ、 現在では .Dv SOCK_STREAM とともに使用されます。 .Pp 読取りでソケットを .Xr select 2 することによって、 .Fn accept するソケットを選ぶことができます。 .Pp .Tn ISO または .Tn DATAKIT のような明瞭な確認が必要な特定のプロトコルでは、 .Fn accept は単に次の接続要求を待ち行列から除くだけで、 確認は行わないと考えられます。 確認は、新しいファイル記述子についての 通常の読取りまたは書込みによって行うことができ、 拒絶は新しいソケットを閉じる事によって実現できます。 .Pp ある種のアプリケーションにおいては、内向きの接続を .Xr accept_filter 9 で前処理することにより、性能が向上するかもしれません。 .Sh 戻り値 システムコールはエラーがあった場合 \-1 を返します。 処理が正常に完了した場合、受け付けたソケットの 記述子である非負整数を返します。 .Sh エラー .Fn accept システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EBADF 記述子が有効ではありません。 .It Bq Er EINTR .Fn accept 操作が割り込まれました。 .It Bq Er EMFILE プロセスの記述子テーブルが満杯です。 .It Bq Er ENFILE システムファイルテーブルが満杯です。 .It Bq Er ENOTSOCK 記述子がファイルを参照しておりソケットではありません。 .It Bq Er EINVAL .Xr listen 2 がソケット記述子に対して呼び出されていません。 .It Bq Er EFAULT .Fa addr 引数がユーザアドレス空間の書込み可能な部分にありません。 .It Bq Er EWOULDBLOCK ソケットが非ブロッキングとマークされ、さらに 受け付けるべき接続要求が存在しません。 .It Bq Er ECONNABORTED 接続要求が到着しましたが、待ち行列で待機している 間に閉じてしまいました。 .El .Sh 関連項目 .Xr bind 2 , .Xr connect 2 , .Xr getpeername 2 , .Xr listen 2 , .Xr select 2 , .Xr socket 2 , .Xr accept_filter 9 .Sh 歴史 .Fn accept システムコールは .Bx 4.2 で登場しました。