Игровая функция и блокировка принимают, сокет с ++ - PullRequest
0 голосов
/ 08 мая 2018

человек, вопрос у меня такой код:

if( listen( server_socket, 50 ) < 0 ) {
    perror( "listen" );
    exit( 1 );
}

while( 1 )
{
    size = sizeof( client_addr )
    client_socket = accept( server_socket, ( struct sockaddr * ) & client_addr, & size );

    connection.push_back( client_socket );
    GameStart( clients );
    clients++;

}

GameStart(); - эта функция, которая принимает / отправляет пакеты, работает все время, пока клиент не отключится.

У меня вопрос, когда один клиент подключен, второй клиент заблокирован и не может войти в игру, как это исправить? C:

1 Ответ

0 голосов
/ 08 мая 2018

Вы должны позвонить GameStart в новой теме. Теперь выполнение не может продолжаться после GameStart().

std::vector<std::thread> threads;

while( 1 )
{
    size = sizeof( client_addr )
    client_socket = accept( server_socket, ( struct sockaddr * ) & client_addr, & size );

    connection.push_back( client_socket );

    std::thread th(GameStart, clients);
    threads.push_back(std::move(th));
    clients++;

}

И вам следует присоединить все потоки назад где-нибудь в вашей программе.

for (auto& th : threads)
{
    th.join();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...