здравствуйте, обдумываю реализацию многопоточного tcp-сервера... т.е. на одно входящее соединение создается 1 поток(до select/poll я пока не добрался)... предположим, крутится бесконечно в цикле метод accept который возвращает дескриптор нового сокета по которому будет идти взаимодействие каждого нового клиента... и создается новая нить(поток), внутри которой будет какой-то обмен. я думаю это примерно так выглядит:
bind();
listen();
while(true) {
newdescriptor = accept();
std::thread([=](){
send();
receive();
}).detach();
}
я вижу проблему: нету удержания соединения, т.е. сокет новый присылает данные на сервер, сервер отвечает, например, и все, соединение закрывается. как сделать чтобы соединение не закрывалось? и будет ли вообще подход с detach работать? или нужно вообще другую логику использовать для данной модели(поток на соединение)?
и все, соединение закрывается
Почему?! TCP соединение закрывается только тогда, когда на обоих сторонах соединения вызвана функция close(). Я не вижу вызова этой ф-ции в Вашем коде.
Внутри цикла accept Вы должны только создать нить и передать в неё полученный от accept сокет. А вот внутри нити будет работать цикл, внутри которого будет выполняться приём сообщений и отправка ответов. И этот цикл будет крутиться до тех пор, пока обе стороны соединения не придут к соглашению о том, что пора закрывать соединение. Например - клиент передал сообщение BYE. Получив это сообщение, нить вызывает close() и завершается.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники