kazmax - Linux で自宅サーバー

listen - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 注意
  5. 返り値
  6. エラー
  7. 準拠
  8. バグ
  9. 関連項目

名前

listen - ソケット(socket)上の接続を待つ

書式

#include <sys/socket.h>
int listen(int sockfd , int backlog );

説明

接続を受け付けるために、ソケットは最初に   socket (2) で生成される。
入ってくる接続のためのキューの最大長は listen ()によって指定されたあと、接続が   accept (2) によって受け付けられる。 listen ()コールは SOCK_STREAM 型または SOCK_SEQPACKET 型のソケットのみに適用できる。

backlog 引き数は、保留中の接続のキューが拡張することのできる最大長を指定する。 キューがいっぱいの状態で接続要求が到着すると、クライアントは ECONNREFUSED というエラーを受け取る。下位層のプロトコルが再送信をサポート していれば、要求は無視され、リトライが成功するかもしれない。

注意

TCP ソケットでの backlog 引数の振る舞いは Linux 2.2 で変更された。 現在ではこの引数は、 受け付けられるのを待っている、 完全に 確立されたソケットのキューの長さを指定する。 以前は不完全な接続要求の数であったが、これを置き換えた。 不完全なソケットのキューの最大長は sysctl 関数の tcp_max_syn_backlog を用いてセットする。 syncookie が有効になっている場合、 論理的に最大長は存在せず、 sysctl 関数による設定は無視される。

返り値

成功時には0を返す。エラー時には -1を返し、 errno を適切に設定する。

エラー

EADDRINUSE
別のソケットが既に同じポートを listen している。
EBADF
引き数 sockfd は有効なディスクリプターではない。
ENOTSOCK
引き数 sockfd はソケットではない。
EOPNOTSUPP
ソケットは listen ()がサポートしている型ではない。

準拠

4.4BSD, POSIX.1-2001. listen ()関数は 4.2BSDで初めて実装された。

バグ

ソケットが AF_INET 型であり、 backlog 引き数が SOMAXCONN 定数 (Linux 2.0 と 2.2 では 128) よりも大きければ、backlog は暗黙のうちに SOMAXCONN に切り詰められる。

関連項目