Без оптимизации компилятор производит очень немой код - каждая команда компилируется очень простым способом, так, чтобы это сделало намеченную вещь. Сборкам Отладки отключили оптимизацию по умолчанию, потому что без оптимизации произведенный исполняемый файл соответствует исходному коду простым способом.
, Как только Вы включаете оптимизацию, компилятор применяет много различных методов для создания кода выполненным быстрее, все еще делая то же самое. Наиболее заметным отличием между оптимизированными и неоптимизированными сборками в Visual C++ является факт, которым значения переменных сохранены в регистрах максимально долго в оптимизированных сборках, в то время как без оптимизации они всегда хранятся в память. Это влияет не только на скорость кода, но и она также влияет на отладку. В результате этой оптимизации отладчик не может надежно получить значение переменной, когда Вы ступаете через код.
существует несколько другой оптимизации, примененной компилятором, как описано в /O Опции (Оптимизируйте Код), документы MSDN . Поскольку общее описание различных методов оптимизации видит статья .
Wikipedia Compiler Optimization
Если у вас заканчиваются исходные порты, но фактически не поддерживается такое количество открытых соединений, установите параметр сокета SO_REUSEADDR
. Это позволит вам повторно использовать локальные порты, которые все еще находятся в состоянии TIME_WAIT
.
Невозможно назначить запрошенный адрес - это строка ошибки для ошибки EADDRNOTAVAIL.
Я подозреваю, что у вас заканчиваются исходные порты. В динамическом диапазоне 16 383 сокета, доступных для использования в качестве порта источника (см. RFC 2780 ). 150 клиентов * 100 подключений = 15 000 портов - значит, вы, вероятно, достигли этого предела.
Это может помочь:
Еще одно важное ответвление эфемерный диапазон портов заключается в том, что он ограничивает максимальное количество подключений от одна машина к определенной службе на удаленная машина! Протокол TCP / IP использует 4-кортеж соединения для различать связи, поэтому если диапазон эфемерных портов всего 4000 широкие порты, это означает, что только 4000 уникальных подключений из клиентский компьютер к удаленной службе в один раз.
Так что, возможно, у вас закончились доступные порты. Чтобы узнать количество доступных портов, см.
$ cat /proc/sys/net/ipv4/ip_local_port_range
32768 61000
Вывод из моей системы Ubuntu, где у меня было бы 28 232 порта для клиентских подключений. Следовательно, ваш тест завершится неудачно, если у вас будет более 280 клиентов.
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.