为什么 ioctl I_SENDFD return 没有权限(EPERM)?
why does ioctl I_SENDFD return no permission (EPERM)?
我想从进程A发送一个tcp套接字的文件描述符给进程B,这样进程B就可以创建另一个具有相同文件描述符的tcp套接字。
一模一样
关键函数调用如下:
ioctl(fd, I_SENDFD, fd_to_send);
但它总是returns EPERM /* 不允许操作 */
我验证了域套接字文件描述符 fd 正在工作,因为我可以通过该 fd 发送正常消息。
我不知道怎么了。我用谷歌搜索,似乎没有人提到 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?
(我没试过)
我想从进程A发送一个tcp套接字的文件描述符给进程B,这样进程B就可以创建另一个具有相同文件描述符的tcp套接字。
一模一样关键函数调用如下:
ioctl(fd, I_SENDFD, fd_to_send);
但它总是returns EPERM /* 不允许操作 */
我验证了域套接字文件描述符 fd 正在工作,因为我可以通过该 fd 发送正常消息。
我不知道怎么了。我用谷歌搜索,似乎没有人提到 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?
(我没试过)