我正在开发一个在两个进程之间进行 IPC 调用的程序。我使用socketpair创建了两个套接字 fd :
int fds[2] = {-1,-1};
if (socketpair(AF_LOCAL, SOCK_STREAM, 0, fds)) {
return NULL;
}
在进程 A(具有系统权限)中,我通过发送(使用 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来设置一些东西?