Я пытаюсь создать параллельный c ++ TCP-сервер, используя потоки. В частности, мне было интересно, могу ли я использовать std :: async, чтобы принимать соединения и обслуживать каждое из них в отдельном потоке.
Пока что я создал грубый макет, но не могу точно сказать, нахожусь ли я на правильном пути.
void networking::TCP_Server::acceptConnection() {
std::string stringToSend{"This is a test string to be replied to"};
int new_fd = accept(listeningFD, nullptr, nullptr);
send(new_fd, stringToSend.c_str(), stringToSend.size(), 0);
sleep(3);
std::cout << ("End of thread");
}
///LISTEN FOR CONNECTIONS ON listeningFD
///CREATE A LIST OF FILE DESCRIPTORS FOR POLL fds[]
(fds[i].fd == listeningFD) {
do {
std::cout << ("New incoming connection - %d\n", new_fd);
std::async(std::launch::async, acceptConnection)
} while (new_fd != -1);
} /* End of existing connection is readable */
} /* End of loop through pollable descriptors */
Я одновременно подключаюсь к серверу с двумя клиентами и ожидаю, что цикл пройдет через оба новых подключения и создаст поток для каждого из них. На данный момент он работает в отложенном режиме, один принимается, другой ждет, пока первый не завершится.
Есть идеи?
(простите за любые ошибки в коде)