ACCEPT(2) — UNIX Programmer’s Manual
名称
accept − ソケットに対するコネクションを受け入れる
形式
#include <sys/types.h>
#include <sys/socket.h>
ns = accept(s, addr, addrlen)
int ns, s;
struct sockaddr ∗addr;
int ∗addrlen;
解説
引数 s は、 socket(2) で作成され、 bind(2) でアドレスが割り当てられ、 listen(2) が実行された後でコネクションを 待っているソケットです。 accept は、 コネクションのキューにある先頭のコネクションを 引きだし、 s と同じ属性を 有する新しいソケットを 作成して、 そのソケットに新しいファイルディスクリプタ ns を割り当てます。 キュー上にペンディングとなっているコネクションがなく、 かつ、 そのソケットがブロッキングでないものとしてマークされていない場合には、 accept は、 コネクションがあるまで呼び出し元を ブロックします。 そのソケットがブロッキングでないものとしてマークされていて、 キュー上にペンディングとなっているコネクションがない場合には、 accept は、 後で述べられているエラーを 返します。 新しく作成されたソケット ns は、 それ以上のコネクションを 受け入れるために使用することはできません。 元のソケット s は、 オープンされたままになります。
引数 addr は、 コネクションの実際のアドレス(通信レーヤでは分っている)が代入される パラメタです。 addr パラメタのフォーマットは、 通信が行われているドメインによって決定されます。 addrlen は、 結果の返されるパラメタであり、 当初は addr によって指し示されているエリアの大きさが収められている必要があります。 リターン時、 これには 返されたアドレスの実際の長さ(バイト)が収められます。 このシステムコールは、 コネクションに基いたソケットタイプ(現在のところ、 SOCK_STREAM)で使用されます。
読み取り用にセレクトしたソケットに対して accept 実行のために、 select(2) することは可能です。
リターン値
このコールは、 エラー時には −1 を 返します。 成功した場合には、 新しく作成されたソケットのディスクリプタである負ではない整数を 返します。
エラー
accept は次の場合に失敗します。
[EBADF] ディスクリプタが無効である。
[ENOTSOCK] ディスクリプタがソケットではなくファイルを 指している。
[EOPNOTSUPP] ソケットのタイプが SOCK_STREAM ではない。
[EFAULT] addr パラメタがユーザアドレススペースの書き込み可能な部分を指していない。
[EWOULDBLOCK] ソケットがブロッキングでないものとしてマークされていて、 受け入れるコネクションがない。
関連事項
bind(2), connect(2), listen(2), select(2), socket(2)
NEWS-OSRelease 3.3