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"