2010-11-30 5 views
0

私は、いくつかのソケットを開いてリッスンして送信するプログラムを持っています。私は非常に奇妙な状態を見つけました。だから、Mac OS Xでは、gethostbynameが完全にプログラムをフリーズさせただけです。gethostbynameはフリーズし、Mac OS X上で100%CPUを使用します

最初に、私はではなく、スレッドを使用しています。第二に、問題が私は2つの私のテストプログラムのコピーを一度に実行する場合にのみ発生します。

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

私はgethostbynameへの呼び出しに問題を絞り込んだようですが、一見を返しません。 (これまでのところgethostbynameへのすべての呼び出しで正常に機能していたことに注意してください)また、この点に当たったとき、突然、gethostbynameに無限ループがあるかのように、テストプログラムのCPU使用率が100%にジャンプします。さらに、プロセスをCtrl-Cで処理することはできません。別の端末からプロセスを削除する必要があります。

明らかにこの動作は、8つの送信側/受信側のペアを開始するこの極端なケースでのみ発生しても、受け入れられません。 (一度に4回、他に4回)誰もこれを前に見ましたが、どうすればそれを避けることができますか?

ところで、テストされている唯一のプラットフォームはLinux(Ubuntu 10.04)ですが、うまく動作します。

+1

この問題はすべてのMacで発生するのでしょうか?後者の場合、おそらくそのMacには何らかの種類のネットワーク設定問題があります。 –

+0

私は1つのマックでテストしました..提案のおかげで、私は別の試してみます。 – Steve

+0

あなたのコードを見ることはできますか?先日、私は無期限にブロックされたように見えるが、実際は他の場所では無限ループだったバグがあった。 CPUが100%にジャンプすると、無限のノンブロッキングループがあるように聞こえます。 – AlastairG

答えて

0

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

sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts" 
関連する問題