Это должно покрыть Вас:
String lines[] = string.split("\\r?\\n");
существует только действительно две новых строки (UNIX и Windows), что необходимо волноваться о.
В Linux вы можете
int syncnt = 1;
int syncnt_sz = sizeof(syncnt);
setsockopt(sockfd, IPPROTO_TCP, TCP_SYNCNT, &syncnt, syncnt_sz);
уменьшить (или увеличить) количество повторных попыток SYN на соединение на сокет. К сожалению, он не переносится в Windows.
Что касается предложенного вами решения: закрытие сокета, пока он все еще находится в состоянии подключения, должно быть нормальным, и это, вероятно, самый простой способ. Но поскольку похоже, что вы уже используете асинхронное завершение, можете ли вы просто попытаться открыть четыре соединения за раз? Если все четыре тайм-аута, по крайней мере, это займет всего 20 секунд вместо 80.
Вы можете попробовать открыть сразу несколько соединений (каждое со своим собственным сокетом), а затем работать с тем, которое откликается первым. Остальные могут быть закрыты.
Вы можете сделать это с помощью неблокирующих вызовов open или с помощью блокирующих вызовов и потоков. Тогда задержка в ожидании открытия соединения не должна быть больше минимально необходимой.
Если вы используете порты завершения ввода-вывода и асинхронные операции, почему вам нужно ждать завершения соединения, прежде чем переходить к следующему серверу в списке? Используйте ConnectEx и передайте перекрывающуюся структуру. Таким образом, время подключения отдельного сервера не складывается, общее время подключения - это максимальное время подключения к серверу, а не сумма.
Все настраиваемые параметры TCP / IP для Windows находятся здесь
См. TcpMaxConnectRetransmissions
Вы должны быть осторожны при отмене тайм-аута сокета. Если вы слишком агрессивны и пытаетесь подключиться ко многим серверам очень быстро, тогда стек TCP / IP Windows будет считать, что ваше приложение является интернет-червем, и подавлять его. Если это произойдет, производительность вашего приложения станет еще хуже.
Детали того, когда именно происходит обратное дросселирование, не разглашаются, но предлагаемый вами тайм-аут (5 секунд), по моему опыту, должен быть нормальным.
Подробные сведения об этом можно найти здесь