中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

FTPエラー【OPS: vsf_sysutil_bind, maximum number of attempts to find a listening port exceeded; OOPS: priv_sock_get_int】について

1.概要

FTPサーバーに接続した際に、タイトル記載した内容のエラーが返ってきました。
これはいったい何かという話ですが
直訳してみると

OPS:vsf_sysutil_bind、リスニングポートを見つけるための最大試行回数を超えました。 OOPS:priv_sock_get_int

ポートに関する異常が起きているという内容でしょう。
このエラーが不定期に起きるといった状況です。


今回はこれについて調べてみました。


2.環境

サーバーの環境は下記のとおりです。


FTPサーバー:vsftpd v3.0.3
通信モード:パッシブモード
データコネクションポート数:20
エラーが発生したコマンド:LIST


クライアントは自作のアプリケーションになります。


3.原因

原因は単純な話でデータコネクションポートの数がクライアントからの接続に対して
少なすぎるというのが原因でした。

クライアントの数は350台程度でこれが一気に接続しに来るので
その際にデータコネクションのポートに空きがなく
接続がはじかれるといった現象になります。

私もこれについては予測はしていましたが
どの程度のポート数が必要かわからず
とりあえずエラーが出るのを待っていたという状況でした。

【350】の接続に対して【20】では捌ききれないということが
わかっただけでも非常に勉強になりました。

この数値に関しては通信速度やデータ容量にもよるかとは思いますが
おおよその目安としてはありなデータではないかと思いましたので
記事に残させて頂きました。


また、データコネクションポートを使わない【DELE】コマンドは正常に動作しています。