FreeBSD QandA 801
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 まで
お知らせください。