Как работает подключение connect?

90
15 июля 2021, 03:40

Как устроена функция 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;
}
Answer 1

Функция connect запускает процесс трехстороннего квитирования - она командует TCP-стеку клиента отправить первый пакет SYN.

Дополнительные соединения, в теории, могут работать быстрее и утилизировать большую полосу пропускания, чем одно соединение. Это доказывается опытом существования в 90е-нулевые программ-качалок типа Download Master, которые качали один файл с сервера в несколько потоков - это позволяло забить модем на 48800 полностью.

Расплатой за это будет усложнение управляющей логики и рост накладных расходов со стороны операционки на обслуживание всего этого балагана.

Восстановление соединения делается так - регулярно отсылается проверочный пакет, на который сервер должен отправить подтверждение. Если в течении заданного времени подтверждения не приходит, соединение рвется и устанавливется заново.

При любой ошибке чтения либо записи в сокет соединение устанавливается заново.

Почитайте уже учебник:

READ ALSO
GNU GCC compiler CodeBlocks не компелируется

GNU GCC compiler CodeBlocks не компелируется

Поставил CodeBlocks для плюсов, компилятор GNU GCCНе запускается, пишет следующее:

108
Как Нарисовать полукруги вокруг центра с помощью Qt?

Как Нарисовать полукруги вокруг центра с помощью Qt?

Необходимо нарисовать полукруги вокруг центра с помощью Qt

75
Как правильно использовать enable_shared_from_this?

Как правильно использовать enable_shared_from_this?

Я пытаюсь понять, зачем вообще нужно использовать enable_shared_from_this?

67
Как подчищать структуру DOM-дерева?

Как подчищать структуру DOM-дерева?

В процессе работы PopUp создаётся и накапливается неактивный код, который приводит к багуПопробовал его руками удалить и всё начало работать

94