Как устроена функция connect? Как лучше реализовать, стоит ли подключать 2 или 10 соединений с разными серверами. Что будет, если подключений больше 3 соединений к клиенту? Как вы реализовали восстановление подключения?
Пример:
Клиент:
if (connect(connectSocket[i], AI->ai_addr, (int)AI->ai_addrlen) != SOCKET_ERROR)
{
break;
}
Сервер:
if (select(numSocket, &SockSet, 0, 0, 0) == SOCKET_ERROR)
{
break;
}
Функция connect запускает процесс трехстороннего квитирования - она командует TCP-стеку клиента отправить первый пакет SYN.
Дополнительные соединения, в теории, могут работать быстрее и утилизировать большую полосу пропускания, чем одно соединение. Это доказывается опытом существования в 90е-нулевые программ-качалок типа Download Master, которые качали один файл с сервера в несколько потоков - это позволяло забить модем на 48800 полностью.
Расплатой за это будет усложнение управляющей логики и рост накладных расходов со стороны операционки на обслуживание всего этого балагана.
Восстановление соединения делается так - регулярно отсылается проверочный пакет, на который сервер должен отправить подтверждение. Если в течении заданного времени подтверждения не приходит, соединение рвется и устанавливется заново.
При любой ошибке чтения либо записи в сокет соединение устанавливается заново.
Почитайте уже учебник:
Сборка персонального компьютера от Artline: умный выбор для современных пользователей