Android(本机):为什么我的套接字不是';不适用于其他流程?
因此,我将通过init.rc启动一个自定义本机守护进程。 它尝试这样做:Android(本机):为什么我的套接字不是';不适用于其他流程?,android,security,sockets,android-ndk,ipc,Android,Security,Sockets,Android Ndk,Ipc,因此,我将通过init.rc启动一个自定义本机守护进程。 它尝试这样做: x_con = android_get_control_socket("test"); int ret = listen(x_con, 1); int new_s = accept(x_con, (struct sockaddr*)&peeraddr, &socklen); 或者这个: x_con = socket_local_server("test:, ANDROID_SOCKET_NAMESPACE
x_con = android_get_control_socket("test");
int ret = listen(x_con, 1);
int new_s = accept(x_con, (struct sockaddr*)&peeraddr, &socklen);
或者这个:
x_con = socket_local_server("test:, ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM );
int new_s = accept(x_con, (struct sockaddr*)&peeraddr, &socklen);
在这两种情况下,我都可以在/dev/socket
下看到套接字,它的访问掩码为0666(由于在init.rc
中设置了参数),但仍然无法接受任何连接(似乎对其他进程不可用)
这是因为“偏执网络”Android的功能吗?与“普通”套接字相比,Android套接字模型似乎非常奇怪 首先,必须通过init.rc初始化套接字,并授予一定的权限 接下来,服务器应用程序将通过以下方式打开它:
x_con = android_get_control_socket("test");
接下来,需要listen()和fnctl()调用:
listen(x_con, 1);
fcntl(x_con, F_SETFD, FD_CLOEXEC);
之后,来自Java的LocalSocket连接可以访问socket,socket可以接受客户端
也允许稍后设置非阻塞模式:
fnctl(x_con, F_SETFL, O_NONBLOCK);
其他组合是不必要的(还有一些指南,比如在Android中使用无线层接口(RIL)——不会链接到低级手册——指出socket_local_server和Android_get_control_socket都是必需的,这显然是不真实的).我的一些实验仍然不清楚访问权限-套接字有时使用错误的权限创建。