UnityとゲームAIと将棋

Unity、Pythonを中心にゲーム開発やゲームAI開発の技術メモ等、たまに将棋も

【Python】Ubuntu で socket.gethostbyname() が 127.0.1.1 を返す時の対処法

結論

/etc/hostsファイル内で以下のように自分のPC名のホスト名が127.0.1.1に指定されているので固定IPに書き換える

127.0.0.1       localhost
127.0.1.1      <自分のPC名>

詳細

Ubuntu 上にて Python で Flask を使ってサーバーを立てるためのコードを書いている際に

host = socket.gethostname()
ADDRESS = socket.gethostbyname(host)

というコードでホストのローカルIPアドレスを取得しようとしていました。 しかし、上記のコードを実行して返ってくるアドレスは

127.0.1.1

で、一体なぜだ?となっていたのですが、色々調べていくうちに/etc/hostsファイル内で以下のようにホスト名が127.0.1.1に指定されていることが判明しました。

127.0.0.1       localhost
127.0.1.1      <自分のPC名> ←これが原因

なぜこうなっているかを調べたところ以下のような記事を発見しました。

qiita.com

どうもDebian系OSの仕様バグっぽいですね。 記事内では

固定IPアドレスが存在する前提で動くシステム/ツール/アプリが不具合を起こすので、回避法として、とりあえず、127.0.1.1を割り当てることが決定、実装されました。

と言及されています。
とりあえず、自分は/etc/hosts内のホスト名を固定IPアドレスに変更して対処しました。