2014-11-25 61 views
0

我正在开发一个由init启动的Android本机可执行服务(我在init.rc中注册它)在系统启动时启动。这个本地可执行文件创建一个侦听0.0.0.0:4615的套接字,并且应该接受来自外部的连接。Android本机可执行文件如何接受外部套接字连接?

OS是Android K;它运行在一个具有以太网接口的开发套件上,以便将其插入Lan。

我已经完成了在root用户的adb shell中运行相同的本地可执行文件的测试。它工作正常 - 我的Windows机器上的外部套接字客户端可以连接到本机可执行文件并成功发送/接收消息。当我通过init启动它时,它会成功侦听0.0.0.0:4615,但外部套接字客户端无法连接到它 - 连接被拒绝。

我init.rc添加的片段是:

service msger-daemon /system/bin/msgerd 
    class main 

当“PS”检查msgerd的用户,我们发现这是根本。

请大家帮忙,谢谢!

+0

不应该C POSIX套接字不管连接类型如何工作? – BlamKiwi 2014-11-25 04:18:23

+0

在手机上进行监听服务可能会有问题,因为如果它不在WIFI网络上,您将不会事先知道它将获得的地址,或者电话公司将允许通过其网络连接到任意端口。 – 2014-11-25 04:22:07

+0

不在手机上,我正在开发支持以太网的开发套件(板)。测试在adb shell中以root用户身份运行相同的可执行文件。我想知道如何在由init启动时使其工作。 – 2014-11-25 04:33:22

回答

0

通过增加在$ TOP /外部/ sepolicy一个SE政策文件解决,该文件的内容是:

# File types must be defined for file_contexts. 
type msgerd, domain; 
type msgerd_exec, exec_type, file_type; 

init_daemon_domain(msgerd) 

permissive msgerd; 

# Add msgerd to various domains 
net_domain(msgerd) 
allow msgerd self:capability { net_admin net_raw }; 

如果有人想回顾和建议,欢迎!