2011-05-25 23 views

回答

1

你是不是發送FD的地址。你正在發送一個數組(在這種情況下有1個元素)。由於只有一個fd被髮送後,文件描述符本身的地址被使用,真的是有這樣做和做之間沒有什麼區別:

int fds[1]; 
fds[1] = ch->fd; 
msg.msg_accrights = (caddr_t) fds; 
msg.msg_accrightslen = sizeof fds; 

SENDMSG將發送陣列的價值,所以另一端將收到文件描述符的值,而不是文件描述符的地址。

+0

很高興知道它發送的價值,而不是地址:) – 2011-05-25 14:51:05

0

msg_accrights指向一個文件描述符數組,因此在傳遞單個文件描述符時代碼是正確的。

此調用的一般形式是一樣的東西:

int fds[2]; 
fds[0] = an_fd; 
fds[1] = another_fd; 
msg.msg_accrights = (caddr_t) fds; 
msg.msg_accrightslen = sizeof fds; 
... 
n = sendmsg(s, &msg, 0); 
+0

我很困惑..做'sendmsg'最後發送fd('&fd')或fd的地址嗎? – 2011-05-25 14:41:56

+0

出於您的目的,它會發送地址,該地址應該指向由'msg_accrightslen'給出長度的'fd'數組。這意味着如果您想傳輸多個文件描述符,則不需要進行多次'sendmsg()'調用,只需指定一個數組即可。我會註解答案。 – geekosaur 2011-05-25 14:45:09

相關問題