在Android上使用boost :: asio :: local :: stream_protocol可以使用哪条路径?

时间:2015-12-09 14:40:28

标签: android sockets boost boost-asio bind

我正在尝试通过boost的Unix Domain套接字包装器在Android上打开一个本地套接字。

我似乎无法找到接受者工作的路径。

using boost::asio::local::stream_protocol;

void test()
{
   boost::asio::io_service io;
   stream_protocol::endpoint ep("/dev/shm/BlahBLah");
   stream_protocol::acceptor(io, ep);
}

我从sock bind()中得到一个异常错误代码:2(ENOENT)

那么,为什么boost stream_protocol不能通过该目录连接? (手动我可以打开一个并将套接字绑定到该路径)

我需要以某种方式设置权限吗?或者是否有不同的路径可行(不通过SD卡,我需要虚拟路径)

1 个答案:

答案 0 :(得分:0)

首先使用共享内存设备似乎很有趣。

UNIX域套接字与它无关。我相信Android内核不支持共享内存。

我认为你应该可以使用任何可访问和写入程序的目录。

“我需要虚拟路径”是什么意思?我想你的意思是你想让套接字不可见¹?应该使用Posix权限或acls。

最后,看看socketpair - IIRC - 为IPC创建未命名的套接字

¹/ proc,lsof和类似的机会仍然可以看到它。不要在插槽名称中公开机密并使用权限保护它。