使用共享内存在两个进程之间传递套接字描述符
作者:互联网
我试图通过两个进程和Linux内核之间的共享内存区域在两个进程之间传递套接字描述符,我的目标是使用一个进程打开一个TCP套接字,并使用第二个进程在同一套接字内写入内容.在两个过程之间不使用承插管,是否可能?
套接字描述符是一个int,如何在Linux中获取描述符的本机形式?如果我只是将描述符的本机形式从进程传递给其他人,我可以将数据写入打开的TCP套接字.
解决方法:
不,您不能仅使用某些替代方法来传输与sendmsg调用中相同的“内容”.当您“传递文件描述符”时,您真正要传输的是对内核内部文件对象的访问.
cmsg结构只是格式化对内核的请求的一种方式,您可以在其中说“我要复制此打开的文件对象,并允许读取此套接字的进程访问它”.名称SCM_RIGHTS可以暗示您要传输的内容实质上是许可.
由于该请求是为了处理具有安全隐患的内核内部对象,因此您不能无所事事.您必须进行系统调用.而sendmsg就是它. (我认为还有其他通过fd传递的API … SysV上带有Streams的东西.我不知道在最近的任何OS中这种流是否还存在.至少对于BSD和Linux,具有SCM_RIGHTS的sendmsg是实现此目的的方法走.)
通常,这正是msg和cmsg之间的区别:cmsg用于内核执行的操作,而不仅仅是将某些字节从套接字的一端复制到另一端.
标签:shared-memory,file-descriptor,unix-socket,c-3,linux 来源: https://codeday.me/bug/20191118/2027778.html