2016-11-29 89 views
0

我正在尝试使用sdbus(sd-bus?)创建一个dbus服务,它将使用代表套接字的fd进行响应。如何使用sdbus发送Unix文件描述符?

我的客户端能够接收字符串和整数,所以我介绍了基础知识。我正在寻找的是如何在响应消息中将fd打包为“h”类型。

+0

你知道文件描述符是创建它们的过程的本地,你? – Olaf

+0

@Olaf Yup,谢谢。我已经承诺在dbus应该提供的进程之间进行一些神奇的编组。试图找出如何调用魔术。 – mabac

+2

您可以在[在Linux套接字中发送文件描述符]中找到在进程之间传输文件描述符所需的原始机制的讨论(http://stackoverflow.com/questions/28003921/sending-file-descriptor-by-linux-socket )。不过,我不确定这与sdbus有什么联系。 –

回答

1

似乎没有必要的魔法。

服务器创建插座并回复客户端的最明显的方法(伪代码):

fd = socket(AF_UNIX, SOCK_STREAM, 0); 
sd_bus_reply_method_return(message, "h", fd); 

客户端只是要DUP()传入的FD,然后能够访问它:

int fd; 
int dup_fd; 
sd_bus_message_read(message, "h", &fd); 
dup_fd = dup(fd);