Я пытаюсь реализовать простой веб-сервер в Linux, который подключается к клиенту (браузеру), получает некоторые запросы от клиента (например, GET), а затем отправляет ответ с нужным файлом.Я использую сокет связи.Я хочу создать пул рабочих процессов (дочерних процессов) при запуске сервера, чья работа заключается в обработке входящих запросов.Родительский процесс должен accept()
принять входящий запрос и отправить свой дескриптор файла одному из рабочих процессов для его обработки и отправить ответ клиенту с запрошенным файлом.
Проблема, с которой я столкнулсяСтолкнулся с тем, что когда я accept()
запрашиваю и отправляю его рабочему процессу, функции recv()
или read()
возвращают -1
, что означает ошибку:
Операция с сокетом наsocket
Но когда я пытаюсь использовать функции recv()
или read()
в родительском процессе, они работают очень хорошо и возвращают количество полученных байтов.
Как я могурешить эту проблему?
PS: я использую общую память для передачи дескриптора файла из родительского процесса в рабочий процесс (дочерний процесс) и использую семафоры для управления тем, какой работникпроцесс обработает запрос
РЕДАКТИРОВАТЬ:
На самом деле, это проектное задание, и одна из спецификаций - отправить дескриптор файла черезTон поделился памятью.Однако можно ли отправить указатель на файл-дескриптор?