tail head cat sleep
QR code linking to this page

manページ  — LISTEN

名称

listen – ソケット上の接続をリスンする

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <sys/types.h>
#include <sys/socket.h>

int
listen(int s, int backlog);

解説

socket(2) で最初にソケットが作成され、 着信接続を受け入れる意思および着信接続用の待ち行列限界が listen() で指定された後、接続が accept(2) で受け入れられます。 listen() システムコールは、タイプが SOCK_STREAM または SOCK_SEQPACKET のソケットにだけ適用されます。

backlog 引数は、延期中の接続の待ち行列を伸ばす際の最大長を定義します。 待ち行列が満杯のときに接続要求が到着すると、クライアントは ECONNREFUSED を示すエラーを受信する可能性があります。 TCP の場合は、接続は黙って落とされます。

FreeBSD 4.5 以前で syncache が導入されるまでは、 backlog 引数は不完全な接続の待ち行列の長さも定義していました。 この待ち行列には、TCP の 3 ウェイハンドシェークを完了させるべく処理中の TCP ソケットが保持されています。 これらの不完全な接続は、現在すべて syncache に保持され、 これは待ち行列の長さに影響されません。 backlog 値を増やすことによりサービス不能攻撃に対処する必要は、もはやありません。

sysctl(3) MIB 変数 " kern.ipc.somaxconn" は backlog のハードリミットを指定します。 kern.ipc.somaxconn より大きい値、または 0 より小さい値が指定されている場合、 backlog の指定は無視されて kern.ipc.somaxconn の値にされます。

ACCEPT フィルタとの相互作用

ソケットに対して accept フィルタを使用すると、 接続済みであるものの accept フィルタの基準にまだ合致しないソケットを 保持するための第 2 の待ち行列が使用されます。 ひとたび基準に合致すれば、これらのソケットは接続完了済の待ち行列に移動され、 accept(2) の対象になります。 第 2 の待ち行列が満杯のときに新規接続が到着すると、 accept フィルタの基準にまだ合致しない最古のソケットが終了されます。

この第 2 の待ち行列は、第 1 の listen 待ち行列のように、 backlog 引数に従って大きさが変わります。

戻り値

The listen function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

listen() システムコールは次の場合に処理を失敗します:
[EBADF]
  引数 s が有効な記述子ではありません。
[EINVAL]
  そのソケットはすでに接続されているか、接続確立中です。
[ENOTSOCK]
  引数 s がソケットではありません。
[EOPNOTSUPP]
  ソケットが、 listen() をサポートするタイプではありません。

関連項目

accept(2), connect(2), socket(2), sysctl(3), sysctl(8), accept_filter(9)

歴史

listen() システムコールは BSD 4.2 で登場しました。 実行時に最大 backlog を設定できる機能、および許容できる最大値を指定する場合に負の backlog を使用する機能は FreeBSD 2.2 で登場しました。

LISTEN (2) May 8, 2002

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

When people say "Drive safe!" I'm like no, a safe is for keeping money, I drive car.
— Artur Bagyants