Я пытаюсь загрузить тестовый сервер 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 сокетов.
Любая помощь будет принята с благодарностью!