Можно ли получить уникальные файловые дескрипторы от принять - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь реализовать половину синхронизации, половину асинхронного сервера.На стороне сервера запросы должны быть прочитаны в очередь, управляемую одним потоком.Затем у меня есть пул рабочих потоков, ожидающих добавления чего-либо в очередь, чтобы они могли обработать запрос.У меня проблемы с моим вызовом accept ().Вызов accept возвращает один и тот же номер дескриптора файла, и это портит рабочие потоки, потому что они прекращают запись в одном месте и запись в другое.Есть ли способ получить согласие на возврат уникальных файловых дескрипторов?Спасибо за помощь в продвижении!Код довольно большой, поэтому было бы нецелесообразно публиковать его все, но здесь есть проблемная область.Стоит также упомянуть, что клиент имеет несколько потоков, отправляющих запросы на сервер.Когда я распечатываю новый дескриптор файла «клиентский сокет», я могу, чтобы он использовал тот же номер дескриптора файла.

void accept_client_requests(int server_socket)
{
    int client_socket;
    struct sockaddr_in client_addr;
    socklen_t sin_size = sizeof client_addr;


    while ( (client_socket= accept(server_socket, (struct sockaddr*)&client_addr, &sin_size)) > 0 )
    {
        char fileName[BUFSIZ];
        get_file_request(client_socket, fileName); 

        pthread_mutex_lock(&mutex);  
            queue[first].fileName = fileName;    
            queue[first].socket = client_socket;
            ++numInQ;

        pthread_mutex_unlock(&mutex); 
        pthread_mutex_unlock(&empty); 
    }
}

1 Ответ

0 голосов
/ 15 июня 2018

Выбор создаст новые файловые дескрипторы, как только старый закроется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...