0

いくつかのソケットを開いてリッスンして送信するプログラムがあります。gethostbynameこれまでのところ、プログラムが完全にフリーズするMacOSXでのみ非常に奇妙な状態を発見しました。

まず、私はスレッドを使用していません。次に、この問題は、テストプログラムの2つのコピーを同時に実行した場合にのみ発生します。

最初のインスタンスは4つの送信ソケットと4つの受信ソケットを作成し、次にそれらは相互にトラフィックの送信を開始します。メッセージングに使用しているネットワークライブラリでgethostbyname()は、受信ポートが開いた直後に呼び出されます。テストプログラムの2番目のインスタンスを開始したとき、3つのレシーバーを開いた後、最後のレシーバーがそこに留まっていることがわかりました。

問題をへの呼び出しに絞り込みましたがgethostbyname、これは一見決して戻りません。(この時点までのすべての呼び出しで正常に機能したことに注意してくださいgethostbyname。)また、この時点に達すると、に無限ループがあるかのように、テストプログラムのCPU使用率が突然100%に跳ね上がりますgethostbyname。さらに、プロセスをCtrl-Cで実行できません。別の端末から、プロセスを強制終了する必要があります。

明らかに、この動作は、8つの送信者/受信者のペアを開始するというこの極端な場合にのみ発生する場合でも、許容できません。(1回のプロセスで4回、別のプロセスで4回。)これを以前に見た人はいますか?どうすれば回避できますか?

ちなみに、テストされた他のプラットフォームはLinux(Ubuntu 10.04)だけで、問題なく動作します。

4

1 に答える 1

0

このOracle Java Bugに悩まされているようです。私の回避策は、Mac のホスト名を /etc/hosts に追加することでした。

sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts"
于 2013-06-23T15:50:58.787 に答える