为什么ioctl I_SENDFD没有返回权限(EPERM)?

为什么ioctl I_SENDFD没有返回权限(EPERM)?

问题描述:

我想从进程A向进程B发送一个tcp套接字的文件描述符,以便进程B可以使用相同的文件描述符创建另一个tcp套接字。为什么ioctl I_SENDFD没有返回权限(EPERM)?

的想法是完全一样passing file descriptors

关键函数调用如下:

ioctl(fd, I_SENDFD, fd_to_send); 

,但它始终返回EPERM/*不允许的操作*/

我验证域套接字文件描述符fd正在工作,因为我可以通过该fd发送正常的消息。

我不知道什么是错的。我GOOGLE了,似乎没有人提到I_SENDFD有权限问题。我尝试使用“sudo”来运行我的程序。它仍然不起作用。

我也试图让一切为文件描述符fcntl(fd_to_send, F_SETFL, S_IRWXU|S_IRUSR|S_IWUSR|S_IXUSR|S_IRWXG| S_IRGRP|S_IWGRP|S_IXGRP|S_IRWXO|S_IROTH|S_IWOTH|S_IXOTH);

也不起作用。

如何解决?

我找到了我的问题的答案。 Linux不支持这一点,但仍然保持API,这是邪恶的。

有关此问题的详细信息,请参阅ioctl giving Invalid Argument

这里是一个变通的解决方案:Can I share a file descriptor to another process on linux or are they local to the process?

(我没试过)