Я пытаюсь реализовать половину синхронизации, половину асинхронного сервера.На стороне сервера запросы должны быть прочитаны в очередь, управляемую одним потоком.Затем у меня есть пул рабочих потоков, ожидающих добавления чего-либо в очередь, чтобы они могли обработать запрос.У меня проблемы с моим вызовом 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);
}
}