ACCEPT
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
accept
- ソケット上の接続を受け入れる
索引
ライブラリ
Lb libc
索引
書式
In sys/types.h
In sys/socket.h
Ft int
Fn accept int s struct sockaddr * restrict addr socklen_t * restrict addrlen
索引
解説
引数
Fa s
は
socket(2)
で作成され、
bind(2)
でアドレスにバインドされ、
listen(2)
も済ませて接続を待ち受けているソケットです。
Fn accept
システムコールは、待ち行列上の最初の接続要求を取り出し、
新しいソケットを作成し、オリジナルのソケット
Fa s
から
O_NONBLOCK
プロパティの状態を継承した
そのソケットへ新しいファイル記述子を割り当てます。
接続要求が待ち行列上に存在せず、
しかもオリジナルのソケットが非ブロッキングとマークされていない場合、
Fn accept
は接続要求があるまで呼び出し側をブロックします。
オリジナルのソケットが非ブロッキングとマークされており、
しかも待ち行列に接続要求が存在しない場合、
Fn accept
は後述のようにエラーを返します。
接続が成立したソケットは、それ以上の接続を受け入れるために
使用できません。
オリジナルのソケット
Fa s
は開いたままです。
引数
Fa addr
は結果の引数で、
通信レイヤに既知の接続エンティティのアドレスで埋められます。
Fa addr
引数の正確な形式は通信が行われるドメインで決まります。
アドレス情報が要望されない場合には、
Fa addr
にヌルポインタを指定することができます。
この場合は
Fa addrlen
は使用されず、これもヌルであるべきです。
そうでない場合には
Fa addrlen
は、値と結果の引数です。
これは最初は
Fa addr
が指す空間のサイズを含んでいなければなりません。
戻り時には、返されるアドレスの実際の長さ (バイト単位) を含むことになります。
この呼び出しは、コネクションをベースとしたソケットタイプ、
現在では
SOCK_STREAM
とともに使用されます。
読取りでソケットを
select(2)
することによって、
Fn accept
するソケットを選ぶことができます。
ISO
または
DATAKIT
のような明瞭な確認が必要な特定のプロトコルでは、
Fn accept
は単に次の接続要求を待ち行列から除くだけで、
確認は行わないと考えられます。
確認は、新しいファイル記述子についての
通常の読取りまたは書込みによって行うことができ、
拒絶は新しいソケットを閉じる事によって実現できます。
ある種のアプリケーションにおいては、内向きの接続を
accept_filter9
で前処理することにより、性能が向上するかもしれません。
索引
戻り値
システムコールはエラーがあった場合 -1 を返します。
処理が正常に完了した場合、受け付けたソケットの
記述子である非負整数を返します。
索引
エラー
Fn accept
システムコールは次の場合に失敗します:
- Bq Er EBADF
-
記述子が有効ではありません。
- Bq Er EINTR
-
Fn accept
操作が割り込まれました。
- Bq Er EMFILE
-
プロセスの記述子テーブルが満杯です。
- Bq Er ENFILE
-
システムファイルテーブルが満杯です。
- Bq Er ENOTSOCK
-
記述子がファイルを参照しておりソケットではありません。
- Bq Er EINVAL
-
listen(2)
がソケット記述子に対して呼び出されていません。
- Bq Er EFAULT
-
Fa addr
引数がユーザアドレス空間の書込み可能な部分にありません。
- Bq Er EWOULDBLOCK
-
ソケットが非ブロッキングとマークされ、さらに
受け付けるべき接続要求が存在しません。
- Bq Er ECONNABORTED
-
接続要求が到着しましたが、待ち行列で待機している
間に閉じてしまいました。
索引
関連項目
bind(2),
connect(2),
getpeername(2),
listen(2),
select(2),
socket(2),
accept_filter9
索引
歴史
Fn accept
システムコールは
BSD 4.2
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 歴史
-
Time: 07:06:24 GMT, January 12, 2009