Я пытаюсь загрузить тестовый сервер Java, открывая большое количество сокет-соединений с сервером, проверяя подлинность, закрывая соединение и затем повторяя его. Мое приложение какое-то время работает отлично, но в итоге я получаю:
Код: Выделить всё
java.net.BindException: Address already in use: connect
Согласно документации, которую я прочитал, причина этого в том, что закрытые сокеты по-прежнему занимают назначенный им локальный адрес в течение определенного периода времени после вызова close(). Это зависит от ОС, но может занимать порядка нескольких минут. Я попробовал вызвать setReuseAddress(true) для сокета в надежде, что его адрес можно будет использовать повторно сразу после вызова close(). К сожалению, это не так.
Мой код для создания сокета:
Код: Выделить всё
Socket socket = new Socket();
socket.setReuseAddress(true);
socket.connect(new InetSocketAddress(m_host, m_port));
Но я все равно получаю эту ошибку:
Код: Выделить всё
java.net.BindException: Address already in use: connect after awhile.
Есть ли другой способ добиться того, что я пытаюсь сделать? Например, я хотел бы: открыть 100 сокетов, закрыть их все, открыть 200 сокетов, закрыть их все, открыть 300 и т. д., максимум до 2000 или около того сокетов.
Подробнее здесь:
https://stackoverflow.com/questions/470 ... pid-socket