Я конвертирую старый tcp-сервер для использования SSL (через GSkit от IBM), и одной из проблем является получение дескриптора SSL в порожденную программу. Исходный код передает необработанный сокет через вызовы к givedescriptor()
, а затем использует takedescriptor()
для получения и затем использует переданный сокет.
Существует ли GSKit / SSL-эквивалент методов описания получения / получения?
givedescriptor () Документация по API
UPDATE:
Проблема в том, что сокет и SSLHandle создаются в одном процессе, который инициализирует среду SSL, а затем должен быть полностью передан другому процессу - отсюда и необходимость дать / взять дескриптор в качестве сокета / SSLHandle необходимо «отдать» новому процессу (на самом деле это программа RPG, которая отправляется и запускается независимо от исходной программы).
ОБНОВЛЕНИЕ 2:
Похоже на этот вопрос , так что я прочитаю и это.
Из другой статьи (в которой нет ответа на основе кода, но есть письменное решение)
"Похоже, что дескрипторы сессии являются просто указателями на некоторое хранилище
в кучу. Благодаря дизайну Single Level Store вы можете скопировать их
через общую память (memmap, shmget / shmat, ...). Вы просто должны убедиться,
что процесс, который открыл среду GSK, не умирает или
группа активации будет очищена, и эти указатели станут
недействительным. Вам также, вероятно, потребуется поставить мьютекс или какой-либо другой
блокируя примитив вокруг них, если вы собираетесь иметь несколько потоков
доступ к общей структуре данных. "
ОБНОВЛЕНИЕ 3:
Это пример, который я использую для разделения памяти между процессами - Пример: использование функций установки семафоров и общей памяти , хотя это еще не совсем решило проблему.
ОБНОВЛЕНИЕ 4:
Я думал, что добавлю больше деталей, почему мне нужно задать вопрос. Я изменяю неблокирующий TCP-сервер, который используется в качестве точки подключения к IBM i. Он имеет «стандартный» механизм для обработки соединений по мере их поступления, создания потоков и согласования соединений в этих потоках. Затем потоки создают независимый процесс (через sbmjob
). В версии vanilla TCP мы можем затем дать работающему заданию дескриптор сокета с помощью функции give/takedescriptor
и весело писать в и из сокета.
Так что мне нужен эквивалентный способ получения независимо работающей программы, чтобы иметь возможность писать в SSL.
Возможно, это невозможно с текущим механизмом.