суть глупого многопоточного tcp-сервера

270
07 июня 2017, 04:08

здравствуйте, обдумываю реализацию многопоточного tcp-сервера... т.е. на одно входящее соединение создается 1 поток(до select/poll я пока не добрался)... предположим, крутится бесконечно в цикле метод accept который возвращает дескриптор нового сокета по которому будет идти взаимодействие каждого нового клиента... и создается новая нить(поток), внутри которой будет какой-то обмен. я думаю это примерно так выглядит:

bind();
listen();
while(true) {
    newdescriptor = accept();
    std::thread([=](){
        send();
        receive();
    }).detach();
}

я вижу проблему: нету удержания соединения, т.е. сокет новый присылает данные на сервер, сервер отвечает, например, и все, соединение закрывается. как сделать чтобы соединение не закрывалось? и будет ли вообще подход с detach работать? или нужно вообще другую логику использовать для данной модели(поток на соединение)?

Answer 1

и все, соединение закрывается

Почему?! TCP соединение закрывается только тогда, когда на обоих сторонах соединения вызвана функция close(). Я не вижу вызова этой ф-ции в Вашем коде.

Внутри цикла accept Вы должны только создать нить и передать в неё полученный от accept сокет. А вот внутри нити будет работать цикл, внутри которого будет выполняться приём сообщений и отправка ответов. И этот цикл будет крутиться до тех пор, пока обе стороны соединения не придут к соглашению о том, что пора закрывать соединение. Например - клиент передал сообщение BYE. Получив это сообщение, нить вызывает close() и завершается.

READ ALSO
работа с файлом в с++

работа с файлом в с++

Я делаю курсач, суть задания создания сделать телефонный справочникСуть проблемы: я хочу сделать что бы ФИО адрес и номер телефона находился...

392
Смена скорости COM-порта на ходу

Смена скорости COM-порта на ходу

Необходимость смены скорости на ходу возникла из-за требований к обратной совместимости системыКонтроллер работает на скорости 9600, и особый...

333
Сборка проекта Qt компилятором Intel C++ Compiler

Сборка проекта Qt компилятором Intel C++ Compiler

Здравствуйте! Имеется Qt 55

423
Jquery-ползунок с маркером

Jquery-ползунок с маркером

Подскажите, как добавить маркер к jqueryslider ?

361