Я пытаюсь загрузить тестовый сервер Java, открыв большое количество соединений сокетов на сервере, аутентифицируя, закрывая соединение, а затем повторяя. Мое приложение работает отлично на некоторое время, но в конце концов я получаю:
java.net.BindException: адрес уже используется: connect
В соответствии с документацией, которую я прочитал, причина этого в том, что закрытые сокеты по-прежнему занимают локальный адрес, назначенный им в течение некоторого периода времени после вызова функции close(). Это зависит от ОС, но может быть порядка минут. Я попытался позвонить setReuseAddress(true)
в сокет, надеясь, что его адрес будет повторно использован сразу после вызова close()
. К сожалению, это не так.
Мой код для создания сокетов:
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
Но я все еще получаю эту ошибку:
java.net.BindException: адрес уже используется: через некоторое время подключитесь.
Есть ли другой способ выполнить то, что я пытаюсь сделать? Я хотел бы, например: открыть 100 сокетов, закрыть их все, открыть 200 сокетов, закрыть их все, открыть 300 и т.д. До максимального количества сокетов или около 2000.
Любая помощь будет принята с благодарностью!