gpt4 book ai didi

android - 使用套接字对在两个进程之间通信时,recvmsg 返回错误(EBADF)?

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:27 25 4
gpt4 key购买 nike

我正在开发一个在两个进程之间进行IPC调用的程序。我使用socketpair创建两个套接字fd:

int fds[2] = {-1,-1};
if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fds)) {
return NULL;
}

在进程A(具有系统权限)中,我通过send(使用fd[0])函数发送一个整数(句柄):

int sock_send_all(int sock_fd, const uint8_t* buf, int len) {  
int s = len;
int ret = send(sock_fd, buf, s, 0);
...
}

在进程B(具有用户权限)中,它等待通过recvmsg接收句柄(使用fd[1]):

ret = recvmsg(fd, &msg, MSG_NOSIGNAL);  

问题出现在这里:recvmsg 立即返回 -1,errorno 等于 9(EBADF)!

我上网冲浪了很长时间试图找到答案,但没有任何有用的信息。您有任何提示或建议吗?谢谢!

这是一个关于进程权限级别的问题吗?或者我应该使用 setsockopt 来设置某些内容?

最佳答案

我已经解决了我的问题。
关键点是将原始文件描述符封装成 ParcelFileDescriptor 对象并将该对象传输到另一个进程,而不是直接在两个进程之间传输文件描述符。
我认为android中ParcelFileDescriptor的实现对原始文件描述符做了一些配置。也许我应该阅读实现代码来找出真正的原因。谢谢大家!

关于android - 使用套接字对在两个进程之间通信时,recvmsg 返回错误(EBADF)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com