gethostbyname зависает и использует 100% CPU в Mac OS X - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть программа, которая открывает несколько сокетов для прослушивания и отправки.Я обнаружил очень странное условие, пока только в Mac OS X, где gethostbyname полностью замораживает программу.

Во-первых, я не использую потоки.Во-вторых, проблема возникает, только если я запускаю две копии моей тестовой программы одновременно.

Первый экземпляр создает 4 отправляющих и 4 принимающих сокета, а затем они начинают отправлять трафик друг другу.,В сетевой библиотеке, которую я использую для обмена сообщениями, gethostbyname() вызывается сразу после открытия принимающего порта.Я обнаружил, что когда я запустил второй экземпляр тестовой программы, после открытия 3 приемников, последний просто застрял там.

Я сузил проблему до вызова gethostbyname, который, по-видимому, никогда не возвращается .(Имейте в виду, что он работал нормально для каждого вызова gethostbyname до этого момента.) Кроме того, когда он достигает этой точки, использование ЦП тестовой программы внезапно переходит на 100%, как будто существует бесконечный цикл вgethostbyname.Кроме того, я не могу Ctrl-C процесса, я должен убить его с другого терминала.

Очевидно, что это поведение недопустимо, даже если это происходит только в этом крайнем случае запуска 8 пар отправитель / получатель.(4 в одном процессе, 4 в другом.) Кто-нибудь видел это раньше и как я могу избежать этого?

Кстати, единственная другая протестированная платформа - это Linux (Ubuntu 10.04), где она работает просто отлично.

1 Ответ

0 голосов
/ 23 июня 2013

Похоже, что вы, возможно, были ужалены этим Oracle Java Bug .Мой обходной путь - добавить имя хоста моего Mac в / etc / hosts

sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts"
...