gethostbyname зависает и использует 100% CPU на Mac OS X

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

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

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

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

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

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

1 ответ

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

sudo bash -c "echo 127.0.0.1 $HOSTNAME >> /etc/hosts"
Другие вопросы по тегам