- ベストアンサー
/etc/servicesの設定について
Solaris2.6を使用しています。 /etc/servicesにプロトコルとポート番号の 対応を記述しますが、あるアプリで使ってい るポートは、このファイルに対応を記述して ないのに、ポートが使用できてしまいます。 (inetdとかのものではありません) そのアプリでは、1024以上のポート番号 を使用しているのですが、その辺も関係ある のかわかりません。 なぜ記述していないものも、動けてしまうの か教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> なぜ記述していないものも、動けてしまうのか教えてください。 まず、結論から言うと、ソケット通信を行う際に /etc/services にポート番号が 記述されていることは、必須ではありません。 プログラムの中に、直接ポート番号を記述することができます。 ただし、良く知られている番号以外は、ポート番号がかち合っちゃうことがある ので、ソケット通信を行うアプリケーションが利用するポート番号を指定する 共通の仕組みとして /etc/services ファイルがあるのです。 ご存知のように、このファイルには、サービスを表す名前とポート番号が対で記述 してあります。 アプリケーションの方では、ポート番号ではなく、サービス名の方をプログラムの 中に記述をし、getservbyname() 関数などでポート番号を取得するように作ります。 このやり方でも、ポートに相当する「サービス名」をプログラム中に記述するわけ ですから、そのサービス名が複数のアプリケーションでかち合ってしまう問題が 解消されているわけではありません。 ただの数値よりも、文字列の方が冗長度が高いので、かち合ってしまう問題が 起こり難いだろう、ということです。
お礼
早速のご回答ありがとうございます。 /etc/servicesの使われ方がよくわかりました。 とてもわかりやすかったです。 ありがとうございました。