HULFT Windows のシステム動作環境設定 listenについて


HULFT Windowsでは、システム動作環境設定(hulenv.cnf)にlisten = というタグがあります。
このlisten = は、(HULFT Windowsが内部で使用している)WinSock listen()のbacklogの値となります。

この記事では、上記の引数:backlogについて、記載します。
※タスク管理・プロジェクト管理における「バックログ」とは、無関係です!!

backlogをざっくり説明すると「サーバ側におけるTCP接続処理時のキュー(待ち行列)のサイズ」です。
「3Way-Handshake済 かつ accept()(または、WSAAccept())処理前」のTCP接続が、前述キューにたまります。
そのTCP接続が、accept()された後にキューから削除されます。

例えば、下記状況が発生したとします。

■モデルケース
○listen()のbacklogに「5」を指定
○サーバ側(listen()実行側)では、1回accept()の処理するためには、0.20秒かかる。(1秒間に5回)
○12:00:00.00クライアント(connect()実行側)からTCP接続要求が5接続発生
○12:00:00.50クライアントからTCP接続要求が2接続発生
○12:00:00.90クライアントからTCP接続要求が3接続発生
○12:00:01.10 クライアントからTCP接続要求が5接続発生(合計15接続要求)

この場合、12:00:00.90の時点で [accept()済接続:5] [backlogキューの接続:5] となります。
これ以上、backlogキューにためられない状態となります。
そのため、12:00:01.10以降においてクライアント側のTCP接続は、5件失敗することが想定されます。
キューに収まらなかったTCP接続は、RST(強制切断)フラグ付きセグメントの送信により切断されます。

accept()の処理速度が十分であれば、問題となりません。
何らかの問題でaccept()の処理遅延になるとも限らないので、システム動作環境設定(hulenv.cnf)にlisten =の値は、余裕をもって設定することをお勧めします。

(追記)
AppacheのListenBackLogやnginxのbacklogも同じlisten()のbacklogです。








お問合せ