アプリケーション用のポートをどのように予約しますか?

アプリケーション用のポートをどのように予約しますか?

私のカスタムアプリケーションのポートリストをどのように維持しますか?

具体的に私が作っている製品には多くのプロセスとプロセス間のコミュニケーションがたくさんあります。

私が経験している問題は、時々OSが私のポートを盗むということです。これはまれですが、実際に発生します。

これは、ポートを指定せずに「::bind」を使用する他のアプリケーションによるものです。

または、時にはバインドされていないソケットを使用して "::connect" を呼び出すと、アプリケーションがポートを盗みます。マニュアルページには次のものがあります。

ソケットがまだローカルアドレスにバインドされていない場合、connect()はソケットを未使用のローカルアドレスにバインドする必要があります(ソケットのアドレス系列がAF_UNIXではない場合)。

だから私の質問は、OSがそのポートを使用しないように必要なポートを予約できるかどうかということです。 /etc/servicesでこれを行うことはできますか?それとも別のアプローチがありますか?

ベストアンサー1

Linuxのサーバーで使用しようとしているので、カーネルが49000と49001をクライアントに渡していないことを確認してください。

sysctl -w net.ipv4.ip_local_reserved_ports = 49000, 49001

それを投げて/etc/sysctl.conf実行してくださいsysctl -p

これはテストされていないことに注意してください。

引用する

おすすめ記事