LINUX.ORG.RU

(cryptoapi) Как мне передать от родителя к дочернему процессу sechandle?

 


1

1

Добрый день.

Я делаю свой web-сервер. Он состоит из мастер процесса, который принимает соединение, и воркеров (процессов, которые обрабатывают разные URL). В этом нет ничего нового, в действительности речь идет о двух видов расширения функциональности тривиального web-сервера (cgi и isapi).

Для протокола http я добился заметных, для меня успехов. Но чтоб привлечь интерес коллег к своему решению (а они помешанны на надежности и защищенности), мне нужно добавить работу по протоколу https.

Мастер процесс у меня принимает соединение, выполняет рукопожатие, вычитывает из совета запрос клиента и успешно его расшифровывает. Расшифрованные URL определяет обработчик и здесь, разумеется, у меня вопросов не возникает. Cgi расширение работает как часы.

Но некоторые URL должен обрабатывать дочерний процесс, который реализует работу с isapi. Т.е. Мастер процесс принял соединение и владеет мандатом клиента. Он передает дочернему процессу все сведения о расшифрованном запросе, включая сокет клиента. Дочерний процесс может читать сокет клиента и писать в него (в рамках протокола http, получив от родителя все сведения о клиенте, дочерний процесс больше не пользуется услугами родителя в рамках конкретно одного запроса и самостоятельно общается с клиентом).

Однако протокол https требует от дочернего процесса расшифровывать и зашифровывать трафик, т.е. Обладать мандатами клиента и сервера, которыми владеет родительский процесс.

Как мне передать от родителя к дочернему процессу sechandle?

Ps: простите за многословность, я хотел сразу описать все детали архитектуры, чтоб было легче меня понять.


Дочерний процесс это форк, да? Поменяй форк на тред и проблема исчезнет. Либо думай как расшаривать одни и те же данные между форками.

А вообще, на примере нжинкса (лень искать на опеннете, там все подробно было и щас я могу наврать) — он форкается на мастер-процессы, которые стартуют треды, которые обслуживают select/poll/epoll.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Оба процесса связаны сокетами. Периодически нужна валить дочерний процесс, потому что он использует загружаемые библиотеки, которые пишут говнокодеры. Это условие очень важное. Я не могу от него отказаться в пользу потоков. Нужно убивать дочерний процесс, чтоб «скрывать» проблемы в загружаемых библиотеках сторонних разработчиков.

Могу я просто взять и передать структуры sechandle (это мандаты сервера и клиента) как массив байт? Или это совсем бред?

ture ()
Ответ на: комментарий от ture

Я не работал с хттпс и не знаю как оно устроено. Почему бред? Сокет клиентский ты как-то передаешь, вот и остальное передай.

Или ты спрашиваешь какие механизмы существуют для передачи данных между процессами?

deep-purple ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.