• ベストアンサー

/etc/servicesの設定について

Solaris2.6を使用しています。 /etc/servicesにプロトコルとポート番号の 対応を記述しますが、あるアプリで使ってい るポートは、このファイルに対応を記述して ないのに、ポートが使用できてしまいます。 (inetdとかのものではありません) そのアプリでは、1024以上のポート番号 を使用しているのですが、その辺も関係ある のかわかりません。 なぜ記述していないものも、動けてしまうの か教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

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

esi
質問者

お礼

早速のご回答ありがとうございます。 /etc/servicesの使われ方がよくわかりました。 とてもわかりやすかったです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう