名 前
listen − ソ ケ ッ ト (socket)上 の 接 続 を 待 つ
書 式
#include
<sys/types.h> /* 「 注 意
」 参 照 */
#include <sys/socket.h>
int listen(int sockfd, int backlog);
説 明
listen() は sockfd が 参 照 す る ソ ケ ッ ト を 接 続 待 ち ソ ケ ッ ト (passive socket) と し て 印 を つ け る 。 接 続 待 ち ソ ケ ッ ト と は 、 accept(2) を 使 っ て 到 着 し た 接 続 要 求 を 受 け 付 け る の に 使 用 さ れ る ソ ケ ッ ト で あ る 。
sockfd 引 き 数 は 、 SOCK_STREAM 型 か SOCK_SEQPACKET 型 の ソ ケ ッ ト を 参 照 す る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。
backlog 引 き 数 は 、 sockfd に つ い て の 保 留 中 の 接 続 の キ ュ ー の 最 大 長 を 指 定 す る 。 キ ュ ー が い っ ぱ い の 状 態 で 接 続 要 求 が 到 着 す る と 、 ク ラ イ ア ン ト は ECONNREFUSED と い う エ ラ ー を 受 け 取 る 。 下 位 層 の プ ロ ト コ ル が 再 送 信 を サ ポ ー ト し て い れ ば 、 要 求 は 無 視 さ れ 、 こ れ 以 降 の 接 続 要 求 の 再 送 信 が 成 功 す る か も し れ な い 。
返 り 値
成 功 し た 場 合 に は ゼ ロ が 返 さ れ る 。 エ ラ ー 時 に は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。
エ ラ ー
EADDRINUSE
別 の ソ ケ ッ ト
が 既 に 同 じ ポ
ー ト を listen し て い
る 。
EADDRINUSE
(イ ン タ ー ネ ッ ト ド メ イ ン ソ ケ ッ ト の 場 合 ) sockfd が 参 照 す る ソ ケ ッ ト が そ れ 以 前 に ア ド レ ス に バ イ ン ド さ れ て お ら ず 、 そ の ソ ケ ッ ト に 一 時 ポ ー ト を バ イ ン ド し よ う と し た 際 に 、 一 時 ポ ー ト と し て 使 用 す る 範 囲 の ポ ー ト 番 号 が す べ て 使 用 中 で あ っ た 。 ip(7) の /proc/sys/net/ipv4/ip_local_port_range の 議 論 を 参 照 の こ と 。
EBADF 引 き 数 |
sockfd は 有 効 な デ ィ ス ク リ プ タ ー で な い 。 |
ENOTSOCK 引
き 数 sockfd は ソ ケ
ッ ト で は な い
。
EOPNOTSUPP ソ ケ ッ ト は
listen() が サ ポ ー ト
し て い る 型 で
は な い 。
準 拠
4.4BSD, POSIX.1−2001. listen() 関 数 は 4.2BSDで 初 め て 実 装 さ れ た 。
注 意
接 続 を 受 け 付 け る に は 、 以 下 の 処 理 が 実 行 さ れ る 。
1. |
socket(2) で ソ ケ ッ ト を 作 成 す る 。 | ||
2. |
bind(2) を 使 っ て ソ ケ ッ ト に ロ ー カ ル ア ド レ ス を 割 り 当 て て 、 他 の ソ ケ ッ ト が こ の ソ ケ ッ ト に connect(2) で き る よ う に す る 。 | ||
3. |
listen() を 使 っ て 、 接 続 要 求 を 受 け 付 け る 意 志 と 接 続 要 求 を 入 れ る キ ュ ー 長 を 指 定 す る 。 | ||
4. |
accept(2) を 使 っ て 接 続 を 受 け 付 け る 。 |
POSIX.1−2001 で は <sys/types.h> の イ ン ク ル ー ド は 必 須 と さ れ て お ら ず 、 Linux で は こ の ヘ ッ ダ ー フ ァ イ ル は 必 要 で は な い 。 し か し 、 歴 史 的 に は 、 い く つ か の 実 装 (BSD 系 ) で こ の ヘ ッ ダ ー フ ァ イ ル が 必 要 で あ り 、 移 植 性 が 必 要 な ア プ リ ケ ー シ ョ ン で は こ の フ ァ イ ル を イ ン ク ル ー ド す る の が 賢 明 で あ ろ う 。
TCP ソ ケ ッ ト で の backlog 引 き 数 の 振 る 舞 い は Linux 2.2 で 変 更 さ れ た 。 現 在 で は こ の 引 き 数 は 、 受 け 付 け ら れ る の を 待 っ て い る 、 完 全 に 確 立 さ れ た ソ ケ ッ ト の キ ュ ー の 長 さ を 指 定 す る 。 以 前 は 不 完 全 な 接 続 要 求 の 数 で あ っ た が 、 こ れ を 置 き 換 え た 。 不 完 全 な ソ ケ ッ ト の キ ュ ー の 最 大 長 は /proc/sys/net/ipv4/tcp_max_syn_backlog を 用 い て 設 定 で き る 。 syncookie が 有 効 に な っ て い る 場 合 、 論 理 的 な 最 大 長 は 存 在 せ ず 、 こ の 設 定 は 無 視 さ れ る 。
backlog 引 き 数 が /proc/sys/net/core/somaxconn の 値 よ り も 大 き け れ ば 、 backlog の 値 は 暗 黙 の う ち に こ の 値 に 切 り 詰 め ら れ る 。 こ の フ ァ イ ル の デ フ ォ ル ト 値 は 128 で あ る 。 バ ー ジ ョ ン 2.4.5 以 前 の カ ー ネ ル で は 、 こ の 上 限 値 は コ ー ド 埋 め 込 み の 固 定 値 SOMAXCONN で あ り 、 そ の 値 は 128 で あ っ た 。
例
bind(2) 参 照 。
関 連 項 目
accept(2), bind(2), connect(2), socket(2), socket(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。