Как избежать NoRouteToHostException?

Без оптимизации компилятор производит очень немой код - каждая команда компилируется очень простым способом, так, чтобы это сделало намеченную вещь. Сборкам Отладки отключили оптимизацию по умолчанию, потому что без оптимизации произведенный исполняемый файл соответствует исходному коду простым способом.

Переменные сохранили в регистрах

, Как только Вы включаете оптимизацию, компилятор применяет много различных методов для создания кода выполненным быстрее, все еще делая то же самое. Наиболее заметным отличием между оптимизированными и неоптимизированными сборками в Visual C++ является факт, которым значения переменных сохранены в регистрах максимально долго в оптимизированных сборках, в то время как без оптимизации они всегда хранятся в память. Это влияет не только на скорость кода, но и она также влияет на отладку. В результате этой оптимизации отладчик не может надежно получить значение переменной, когда Вы ступаете через код.

Другая оптимизация

существует несколько другой оптимизации, примененной компилятором, как описано в /O Опции (Оптимизируйте Код), документы MSDN . Поскольку общее описание различных методов оптимизации видит статья .

Wikipedia Compiler Optimization

59
задан Grundlefleck 15 October 2009 в 21:27
поделиться

4 ответа

Если у вас заканчиваются исходные порты, но фактически не поддерживается такое количество открытых соединений, установите параметр сокета SO_REUSEADDR . Это позволит вам повторно использовать локальные порты, которые все еще находятся в состоянии TIME_WAIT .

5
ответ дан 24 November 2019 в 18:29
поделиться

Невозможно назначить запрошенный адрес - это строка ошибки для ошибки EADDRNOTAVAIL.

Я подозреваю, что у вас заканчиваются исходные порты. В динамическом диапазоне 16 383 сокета, доступных для использования в качестве порта источника (см. RFC 2780 ). 150 клиентов * 100 подключений = 15 000 портов - значит, вы, вероятно, достигли этого предела.

9
ответ дан 24 November 2019 в 18:29
поделиться

Это может помочь:

Диапазон эфемерных портов

Еще одно важное ответвление эфемерный диапазон портов заключается в том, что он ограничивает максимальное количество подключений от одна машина к определенной службе на удаленная машина! Протокол TCP / IP использует 4-кортеж соединения для различать связи, поэтому если диапазон эфемерных портов всего 4000 широкие порты, это означает, что только 4000 уникальных подключений из клиентский компьютер к удаленной службе в один раз.

Так что, возможно, у вас закончились доступные порты. Чтобы узнать количество доступных портов, см.

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

Вывод из моей системы Ubuntu, где у меня было бы 28 232 порта для клиентских подключений. Следовательно, ваш тест завершится неудачно, если у вас будет более 280 клиентов.

16
ответ дан 24 November 2019 в 18:29
поделиться

Have you tried setting:

echo "1" >/proc/sys/net/ipv4/tcp_tw_reuse

and/or

echo "1" >/proc/sys/net/ipv4/tcp_tw_recycle

These settings may make Linux re-use the TIME_WAIT sockets. Unfortunately I can't find any definitive documentation.

52
ответ дан 24 November 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: