我试图通过两个进程和Linux内核之间的共享内存区域在两个进程之间传递套接字描述符,我的目标是使用一个进程打开一个TCP套接字,并使用第二个进程在同一套接字内写入内容。在两个过程之间不使用承插管,是否可能?
套接字描述符是一个int
,如何在Linux中获取描述符的本机形式?如果我只是将描述符的本机形式从进程传递给其他人,我可以将数据写入打开的TCP套接字。
不,您不能仅使用某些替代方法来传输与sendmsg
调用相同的“内容” 。当您“传递文件描述符”时,您真正要传输的是对内核内部文件对象的访问。
cmsg结构只是格式化对内核的请求的一种方式,您可以在其中说“我要复制此打开的文件对象,并允许读取此套接字的进程访问它”。该名称SCM_RIGHTS
可以说明您要转让的内容实质上是一种许可。
由于该请求是为了处理具有安全隐患的内核内部对象,因此您不能无所事事。您必须进行系统调用。而且sendmsg
是它。(还有其他FD传递的API ...上的SysV我觉得有什么用流。我不知道这是否一个仍处于近期的任何操作系统活着。对于BSD和Linux,至少,sendmsg
与SCM_RIGHTS
是要走的路。 )
通常,这正是msg和cmsg之间的区别:cmsg用于内核执行的操作,而不仅仅是将某些字节从套接字的一端复制到另一端。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句