accept

ACCEPT(2)                   Linux Programmer's Manual                  ACCEPT(2)



名前
       accept - ソケット(socket)の接続を受け入れる

書式
       #include <sys/types.h>

       #include <sys/socket.h>

       int accept(int s, struct sockaddr *addr, int *addrlen);

説明
       引き数 s socket(2) によって作成され、 bind(2) でアドレスに結びつけられ、 listen(2)
       で接続を待っていたソケットである。 accept 関数は接続待ちキューの最初の接続要求を取り出し s
       と同じ特性の新しいソケットを作成して、そのソケットのために 新しいファイル・ディスクリプター(descriptor)を割り当てる。
       もしキューに接続待ちがなく、そのソケットが非停止(non-blocking) に設定されていない場合には、 accept
       は接続要求があるまで停止(block)する。もしそのソケットが 非停止に設定されており、キューに接続待ちがない場合には、 accept
       以下に記述したエラーを返す。受け入れたソケットはそれ以上の 接続の受け入れに使用することはできない。本来のソケット s
       はオープンされたままである。

       引き数 addr は結果用のパラメーターであり、通信層によって知らされた接続相手の アドレスが入れられる。 addr
       パラメーターの正確な形式はどの通信を行なっている ドメインに依存している。 addrlen は値と結果両用のパラメーターであり、最初に addr
       の指している領域の大きさを入れて呼び出し、 実際のアドレスの長さ(バイト単位)が入れられて返される。 このコールは接続指向のソケット型、今のところ
       SOCK_STREAM に使用される。

       読み込みの用に使用することにより、 accept を行なう目的でソケットを select(2) することが可能である。

       ISO DATAKIT のような明確な認証を要求するプロトコルでは、 accept は単に次の接続要求をキューから取り出そうとするに過ぎず、
       認証(confirmation)は行なわない。認証は新たな ファイル・ディスクリプターを通常に読み書きすることによって行なう。
       そして拒絶(rejection)は新しいソケットをクローズすることによって行なう。

       msg_iovlen をゼロにし、 msg_controllen をゼロ以外にして recvmsg(2) コールを呼び出すか、
       getsockopt(2) 要求を呼び出すことにより、認証なしでユーザーの接続要求データを取得できる。 同様に、制御情報のみ与えて
       sendmsg(2) コールを呼び出すか、 setsockopt(2) を呼び出すことにより、 ユーザーに接続拒否情報を提供することができる。


返り値
       このコールはエラー場合は -1 を返す。成功した場合は負でない整数を返し、 これは受け入れたソケットのディスクリプターである。

エラー
       EBADF  ディスクリプターが無効である。

       ENOTSOCK
              ディスクリプターがソケットでなくファイルを参照している。

       EOPNOTSUPP
              参照しているソケットが SOCK_STREAM 型でない。

       EFAULT addr パラメーターが書き込み可能なユーザーのアドレス空間の一部でない。

       EWOULDBLOCK
              ソケットが非停止に設定されており、受け入れるべき接続が存在しない。

準拠
       SVr4, 4.4BSD ( accept 関数は BSD 4.2 で最初に現われた)。 SVr4 には他に EOPNOTSUPP
       エラー状態についての記述がある。

参照
       bind(2), connect(2), listen(2), select(2), socket(2)



BSD Man Page                      24 July 1993                         ACCEPT(2)