gethostbyaddr() に 192.168.0.4 などの NAT で生成された IP アドレスを検索するように依頼した場合、それが機能すると期待できますか?
背景: ネットワーク環境向けの制御コードを自宅でテストしています。時々、このコードは gethostbyaddr() 呼び出しを実行して、メッセージを送信したマシンの詳細を取得します。アドレスはローカル マシンのアドレスであることが多く、現在のマシン自体のアドレスである場合もあります。通常、これで問題は発生しません。しかし、古い Netcomm ADSL ルーターを Netgear ルーターに置き換えたところ、ローカル NAT 環境内のマシンに対する gethostbyaddr() 呼び出しが、a) 30 秒後にタイムアウトになり、b) エラーを示すために NULL が返されることがわかりました。実験的に古いルーターに戻ってみると、同じ呼び出しも失敗して NULL が返されることがわかりましたが、すぐに失敗します。コードはエラー リターンを処理できます (これが、私がこれまで気付かなかった理由です) が、新しい 30 秒のタイムアウトは非常に厄介です。明らかに、この問題を回避するコーディング方法は多数ありますが、ほとんどの場合、アドレスが 192.168 アドレスであるケースをトラップし、gethostbyaddr() 呼び出しを回避する必要があります。私の質問は、gethostbyaddr() 呼び出しは NAT 環境で常に失敗するのか、それとも機能する場合があるのかということです。(その場合、それらを避けたくありません。)または、ルーターを適切にセットアップしていないだけですか?ちなみに、私はこれを OS X で実行していますが、Snow Leopard と Lion の両方で同じ動作が見られます。) それとも、ルーターを正しく設定していないだけですか? ちなみに、私はこれを OS X で実行していますが、Snow Leopard と Lion の両方で同じ動作が見られます。) それとも、ルーターを正しく設定していないだけですか? ちなみに、私はこれを OS X で実行していますが、Snow Leopard と Lion の両方で同じ動作が見られます。