Recv не работает в потоке — Windows C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Recv не работает в потоке — Windows C++

Сообщение Anonymous »

В настоящее время я разрабатываю TCP-сервер и использую многопоточность, поэтому для этого я инициализирую сервер с помощью Server.start(), который дает мне тип fd, а затем я инициализирую бесконечный цикл для принятия и запуска нового потока, например:

Код: Выделить всё

int main()
{
spdlog::set_pattern("[%H:%M:%S %z] [%^---%L---%$] [thread %t] %v");

Server server(9001);
int sockfd = server.start();

if (sockfd < 0)
{
spdlog::error("Cannot init server");
return 1;
}

while (true)
{
int fd = server.loop();
std::thread t(newclient, fd);
}
}

void newclient(int fd)
{
Handler handler;
handler.loop(fd);
closesocket(fd);
};
handler.loop:

Код: Выделить всё

void Handler::loop(int fd){
std::string buffer;

Communication communication(fd);

while(true){
buffer.erase();
buffer = communication.recv_str();
if (buffer == "") {
continue;
}
}
...
}
и communication.recv_str():

Код: Выделить всё

std::string Communication::recv_str(){
std::vector buffer(CHUNK_SIZE);
std::string rcv;
long bytes_received = 0;

do {
bytes_received = recv(fd, &buffer[0], CHUNK_SIZE, 0);

if ( bytes_received < 0 ) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/78461757/recv-doesnt-work-in-a-thread-windows-c[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»