我正在将一个旧的仅tcp的服务器转换为使用SSL(通过IBM的GSkit),问题之一是将SSL句柄放入生成的程序中。原始代码通过调用givedescriptor()
将原始套接字传入,然后使用takedescriptor()
获取并使用传入的套接字。
是否存在GSKit / SSL等效的Give / Take描述符方法?
givedescriptor() API文档
更新:
问题是套接字和SSLHandle是在一个进程中创建的,该进程初始化了SSL环境,然后需要完全传递给另一个进程-因此需要提供/获取描述符,如套接字/ SSLHandle需要“赋予”新流程(实际上是一个RPG程序,该程序已提交并独立于原始程序运行)。
更新2:
看起来与this question类似,所以我也会对此进行阅读。
从另一篇文章(没有基于代码的答案,而是书面解决方案)
“看起来会话句柄只是指向某些存储的指针 在堆里。由于单层存储的设计,您可以复制它们 通过共享内存(memmap,shmget / shmat等)。您只需要确保 打开GSK环境的过程不会消失,或者 激活组将被清理,这些指针将变为 无效。您可能还需要放置一个互斥锁或其他 如果要有多个线程,则将原始对象锁定在它们周围 访问共享数据结构。”
更新3:
这是我用来在进程之间共享内存的示例-Example: Using semaphore set and shared memory functions,但仍不能完全解决问题。
更新4:
我想我将添加更多有关为什么我要问这个问题的细节。我正在更改非阻塞TCP服务器,该服务器用作与IBM i的连接点。它具有“标准”机制,可在连接出现时处理连接,创建线程并协商这些线程中的连接。线程然后创建独立的进程(通过sbmjob
)。在原始TCP版本中,我们然后可以通过give/takedescriptor
函数为正在运行的作业提供套接字的句柄,并轻松地在套接字中写入和写入。
因此,我需要一种等效的方法来使独立运行的程序能够写入SSL。
使用当前机制可能无法做到这一点。
答案 0 :(得分:2)
没有操作系统已知的“ SSL句柄”,它可以由子进程继承或转移到其他进程。 “ SSL句柄”在原始过程中将不可避免地成为某些不透明数据结构中的指针,因为SSL是应用层协议,因此在该过程中实现,而不是在内核中。因此,您不能将“ SSL句柄”“交给”另一个进程并期望它起作用。
编辑
这里的答案并没有真正回答潜在的问题,即我应该怎么做,因此尽管悬赏金已经颁发,但我不能接受唯一的答案。
答案是您不能这样做。
使用当前机制可能无法做到这一点。
正确。正如您在问题中预见到的那样,很难理解为什么您不能在答案中接受它。
答案 1 :(得分:-1)
原则上您的想法并非不可能!如果您认为可行,请尝试找到答案!
如果SO的所有回答者都说这是不可能的,那并非总是如此!
例如: 15年前,我试图找到答案,如何编写一个Java小程序,该小程序可以在服务器上读写图像。 每个人都对我说这是不可能的,但我不相信。一世 试图一次又一次地找到我的答案。我找到了答案:我 从一位专家那里拆解了一份在线应用软件 代码我找到了答案:使用PHP服务器,我们可以做到。我问 此小程序的所有者,有关之间的通信详细信息 Java小程序和PHP服务器,他为我提供了帮助。
您必须找到您的专家。这是找到正确答案的第一条规则。可能会在IBM论坛上找到一个人。
第二条规则是从专家那里读很多书。不仅只有一本书。可能是三个或更多个。
我也建议您阅读 How do I ask a good question? ,因为在您的问题中您没有任何计算机语言。而且我认为我们聘请的专家可以为您提供正确的答案。
关于SO的寻找正确专家的第一条规则是设置正确标签。没有正确的标签,只有很少的人会看到您的问题,而幸运的是,他们中的某人是您的正确专家。
保持乐观并尝试相信您!祝你好运,成功!