Неблокирующий сокет в C ++ - ошибка временно недоступного ресурса - PullRequest
0 голосов
/ 18 мая 2018

В настоящее время я работаю в серверной программе в linux, которая должна подключиться к одному клиенту и прослушивать его для команд.Как только он получает определенную команду, я должен отправить клиенту некоторые значения.Значения генерируются в основной функции, а серверная программа запускается в потоке.

Итак, в этом случае я подумал, что должен реализовать неблокирующий сокет.Но я получаю Ресурс временно недоступной ошибки.Если кто-нибудь подскажет мне направление дальнейших исследований, это будет полезно, так как я застрял в этой реализации на долгое время.

Вот код цикла while,

void server::serve() {
struct sockaddr_in clientAddress;
socklen_t sin_size;
sin_size = sizeof(struct sockaddr_in);

if(client = accept(sockId,(struct sockaddr *)&clientAddress,&sin_size) == -1){
    perror("accept");
}

fcntl(sockId,F_SETFL,O_NONBLOCK);
fcntl(client,F_SETFL,O_NONBLOCK);

while (1) {
    if(client = accept(sockId,(struct sockaddr *)&clientAddress,&sin_size) == -1){
        perror("accept");
    }

    cout <<"client "<<client<<endl;
    fcntl(client,F_SETFL,O_NONBLOCK);
    getMessage(client);

    if(transmitFlag != -1)
    sendRequest(client);

    }
    closeSocket();
}
...