FreeBSD QandA 801

FreeBSD QandA

Q. network を利用するサーバプログラムを起動しようとしたら
   	Unable to bind address 
   	Can't bind socket
   と言われてサーバプログラムが起動しません。

A. root 以外の権限で port番号 1024 未満を利用するサーバプログラムを起動し
   ようとしているか、何か別のプログラムがこのサーバプログラムが使う port
   番号を先に使ってしまっているようです。

   1024 未満の port 番号は特権 port と呼ばれ、root 以外の権限で起動された
   プログラムは、この特権portで接続を待ち受けることができない決まりになっ
   ています。

   network を通じて通信するプログラムは 相手のマシンを識別する IPアドレス
   と相手のマシンの各プログラムを識別する port番号を指定して通信を行います。
   IPアドレスが電話番号、port番号は内線番号と思ってください。

   どのサーバプログラムが何番の port番号を利用するのかはだいたい決まって
   います。/etc/services に port番号の対応表があります。

   どのプログラムがどの port番号を使っているかの調べ方は [管理番号 800]
   を参照してください。

   サーバプログラムによっては、どちらの理由で bind に失敗したのか、ヒント
   になるメッセージを出力する場合があります。

   	Permission denied

   というメッセージは、root権限を持たないプログラムが特権port を使おうと
   したことを意味します。

   	Address already in use

   というメッセージは、別のプログラムが先にこのサーバプログラムが使おうと
   している port番号を使ってしまっていることを意味します。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。