- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个在两个进程之间进行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/
iam 尝试使用 sendmsg、recvmsg 函数在两个进程之间传递文件描述符.. 我通过在unix域中创建套接字来做到这一点。 当我执行它时,我收到了recvmsg的操作不支持错误,它与send
我正在使用 recvmsg 和 sendmsg 通过异步 STREAM 套接字发送数据。要传输的数据量相当大,在 15 MB 到 30 MB 之间。 我不明白为什么数据到达时损坏了。发送消息和接收函数
我有套接字系列 PF_PACKET 类型 SOCK_RAW。通过 recvmsg 和 poll() 读取消息。我随机地和定期地收到 recvmsg 返回 EDEADLK。我尝试用下一个代码调试这个问题
本文整理了Java中org.zeromq.ZMsg.recvMsg()方法的一些代码示例,展示了ZMsg.recvMsg()的具体用法。这些代码示例主要来源于Github/Stackoverflow/
自 recvmsg()在 asyncio 中丢失模块,我试图以与 BaseEventLoop.sock_recv() 完全相同的方式重新实现它已实现: import asyncio, socket d
我正在Linux中打开RAW套接字并读取所有消息。 recvmsg(mysock, &msg, 0); 我遍历该msg缓冲区上的所有cmsg,但只有一个。 for (c = CMSG_FIRS
如果C套接字的recvmsg()具有队列,我如何找出队列中积压了多少项? 我的问题是,从recvmsg()接收到某些内容后,代码的速度有时会比发送到recvmsg()的数据速率慢,这在逻辑上会导致排队
我在接收 UDP 数据包时遇到问题。我的环境在 ARMv7 上运行 Android 2.1。对于 C 套接字编程,我使用 recvmsg 从内核接收数据包,但偶尔会出现一些数据包丢失事件。发送方和接收
我正在开发一个在两个进程之间进行IPC调用的程序。我使用socketpair创建两个套接字fd: int fds[2] = {-1,-1}; if (socketpair(AF_LOCAL, SOCK
在这个问题上有点困惑 :-)。我有一些代码在 Ubuntu 10.04 上运行,它使用 recvmsg 调用来接收音频 UDP 数据包。这部分是一个更大的 SIP 客户端的一部分,我一直在通过网络使用
我正在编写一个程序,使用 sendmsg 在两个进程之间传递文件描述符和 recvmsg通过域套接字。对于发送文件描述符,附加数据包含在 msghdr.msg_iov 中和 msghdr.msg_io
我有一个使用 pthreads 的小 Unix 守护进程。一个线程循环运行,使用 recvmsg 读取网络数据包。当守护进程收到信号时,会设置一个标志,告诉所有线程跳出循环并退出。然而,“监听”线程从
我正在编写一个 CAN 记录器程序。我记录数据的方式类似于 candump -tool 在调用 candump 时执行此操作喜欢 candump any : https://github.com/li
我正在使用 Linux 机器,并且正在发送 UDP 数据包。 我想为传输的数据包获取 NIC 上的硬件时间戳。我看过其他帖子并设置了适当的标志。 int flag = SOF_TIMESTAMPING
在unix系统上使用TCP套接字,python似乎完全忽略了我的ancbufsize。 data, ancdata, msg_flags, address = sock.recvmsg(1, sock
我必须使用 recvfrom() 从多个接口(interface)接收(在编译时未知,并且还需要保留消息的确切顺序,而不是使用单独的系统调用从每个接口(interface)接收反过来),但我还需要访问
我在 Linux 中有一个使用 C 的应用程序,其中我创建了一个套接字来接收 IPv6 UDP 数据包。 为了接收数据包,我使用了 recvmsg(),因为我需要检索 ifindex,我可以使用选项
在使用 recvmsg 时,我使用 MSG_TRUNC 和 MSG_PEEK,如下所示: msgLen = recvmsg(fd, &hdr, MSG_PEEK | MSG_TRUNC) 这给出了为下
我正在使用 UDP 的 Haskell 中编写一个隧道应用程序。为了让它“正确”,我想适本地设置 MTU。但是,我找不到任何简单的方法来做到这一点。 haskell 中是否有一个 recvmsg()
我在 CentOS 6.5 上,内核版本为 kernel-2.6.32-431.el6。 我试图找到 recvmmsg() 的实现,希望我没有看错源代码 ~/rpmbuild/BUILD/kernel
我是一名优秀的程序员,十分优秀!