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