Как устроена функция 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 полностью.
Расплатой за это будет усложнение управляющей логики и рост накладных расходов со стороны операционки на обслуживание всего этого балагана.
Восстановление соединения делается так - регулярно отсылается проверочный пакет, на который сервер должен отправить подтверждение. Если в течении заданного времени подтверждения не приходит, соединение рвется и устанавливется заново.
При любой ошибке чтения либо записи в сокет соединение устанавливается заново.
Почитайте уже учебник:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Поставил CodeBlocks для плюсов, компилятор GNU GCCНе запускается, пишет следующее:
Необходимо нарисовать полукруги вокруг центра с помощью Qt
Я пытаюсь понять, зачем вообще нужно использовать enable_shared_from_this?
В процессе работы PopUp создаётся и накапливается неактивный код, который приводит к багуПопробовал его руками удалить и всё начало работать