У меня есть программа, которая открывает несколько сокетов для прослушивания и отправки.Я обнаружил очень странное условие, пока только в Mac OS X, где gethostbyname
полностью замораживает программу.
Во-первых, я не использую потоки.Во-вторых, проблема возникает, только если я запускаю две копии моей тестовой программы одновременно.
Первый экземпляр создает 4 отправляющих и 4 принимающих сокета, а затем они начинают отправлять трафик друг другу.,В сетевой библиотеке, которую я использую для обмена сообщениями, gethostbyname()
вызывается сразу после открытия принимающего порта.Я обнаружил, что когда я запустил второй экземпляр тестовой программы, после открытия 3 приемников, последний просто застрял там.
Я сузил проблему до вызова gethostbyname
, который, по-видимому, никогда не возвращается .(Имейте в виду, что он работал нормально для каждого вызова gethostbyname
до этого момента.) Кроме того, когда он достигает этой точки, использование ЦП тестовой программы внезапно переходит на 100%, как будто существует бесконечный цикл вgethostbyname
.Кроме того, я не могу Ctrl-C процесса, я должен убить его с другого терминала.
Очевидно, что это поведение недопустимо, даже если это происходит только в этом крайнем случае запуска 8 пар отправитель / получатель.(4 в одном процессе, 4 в другом.) Кто-нибудь видел это раньше и как я могу избежать этого?
Кстати, единственная другая протестированная платформа - это Linux (Ubuntu 10.04), где она работает просто отлично.