2016-11-29 267 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);