SSL-эквивалент для givedescriptor () и takedescriptor () - PullRequest
0 голосов
/ 27 июня 2018

Я конвертирую старый 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.

Возможно, это невозможно с текущим механизмом.

Ответы [ 2 ]

0 голосов
/ 23 июля 2018

В принципе ваша идея не является невозможной! Если вы считаете, что это возможно, попробуйте найти ответ!

Если все отвечающие из SO скажут, что это невозможно, то не все время правда!

Например: 15 лет назад я пытался найти ответ, как мне написать Java-апплет, который может писать и читать изображения на сервере. Все говорили мне, что это невозможно, но я не поверил. я пытался найти мой ответ снова и снова. И я нашел ответ: я разобрал один онлайн аплет от одного специалиста и в исходнике Код я нахожу свой ответ: с помощью сервера PHP мы можем сделать это. Я спросил владелец этого апплета о деталях связи между Java-апплет и PHP-сервер, и он мне помог.

Вы должны найти своего специалиста. Это первое правило, чтобы найти правильный ответ. Может быть, на форуме IBM вы кого-нибудь найдете.

Второе правило - читать об этом много книг у специалиста. Не только одна книга. Может быть три или более.

Я бы порекомендовал вам также прочитать Как мне задать хороший вопрос? , поскольку в вашем вопросе у вас нет языка программирования. И я думаю, что у нас есть ТАКОЙ специалист, который мог бы дать вам правильный ответ.

Первое правило в SO для поиска правильного специалиста - установить правильные теги. Без правильных меток только несколько человек увидят ваш вопрос, и только вопрос удачи в том, что кто-то из них является для вас подходящим специалистом.

Будь оптимистом и старайся верить в себя! Удачи и успехов!

enter image description here

0 голосов
/ 21 июля 2018

Не существует такого понятия, как «дескриптор SSL», известного операционной системе и наследуемого дочерними процессами или передаваемого другим процессам. «Дескриптор SSL» неизбежно будет указателем на некоторую непрозрачную структуру данных в исходном процессе, , поскольку SSL является протоколом прикладного уровня и, следовательно, реализуется в процессе, а не в ядро. Таким образом, вы не можете «дать» дескриптор SSL другому процессу и ожидать, что он будет работать.

EDIT

Ответы здесь на самом деле не отвечают основному вопросу, как я должен это сделать, поэтому, хотя награда была присуждена, я не могу принять единственный ответ.

Ответ в том, что вы не можете сделать это.

Возможно, это невозможно с текущим механизмом.

Правильно. Поскольку вы предусмотрели такую ​​возможность в своем вопросе, трудно понять, почему вы не можете принять ее в ответе.

...