2014-11-25 3 views
0

나는 시스템 부팅시 init (내가 init.rc에 등록)에 의해 시작되는 Android 기본 실행 가능 서비스를 개발 중이다. 이 기본 실행 파일은 0.0.0.0:4615에서 수신 대기중인 소켓을 만들고 외부로부터의 연결을 수락합니다.Android 기본 실행 파일이 외부 소켓 연결을 허용하는 방법은 무엇입니까?

OS는 Android K입니다. LAN에 연결하기위한 이더넷 인터페이스가있는 개발 키트에서 실행됩니다.

나는 adb 셸에서 동일한 기본 실행 파일을 루트로 실행하여 테스트를 수행했습니다. 그것은 잘 작동 - 내 Windows 컴퓨터에서 외부 소켓 클라이언트가 네이티브 실행 파일에 연결할 수 있으며/recv 메시지를 성공적으로 보낼 수 있습니다. init에 의해 실행되면 0.0.0.0:4615를 성공적으로 수신하지만 외부 소켓 클라이언트는 연결할 수 없습니다 - 연결이 거부되었습니다.

내가 init.rc에 추가 된 단편이다

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

"PS는"msgerd의 사용자를 확인하는

, 우리는이 루트 알게되었다.

감사합니다.

+0

POSIX 소켓은 연결 유형에 관계없이 작동해야합니까? – BlamKiwi

+0

전화에서 청취 서비스를받는 것은 문제가 될 수 있습니다. WIFI 네트워크에 연결되어 있지 않으면 어떤 주소를 얻을지 미리 알 수 없거나 전화 회사에서 네트워크를 통해 임의의 포트에 연결할 수 있기 때문입니다. –

+0

전화가 아니므로 이더넷을 지원하는 개발 키트 (보드)를 준비 중입니다. 그리고 adb 쉘에서 루트와 동일한 실행 파일을 실행하는 테스트가 통과됩니다. 나는 init에 의해 실행될 때 어떻게 작동시킬 수 있는지 알고 싶다. –

답변

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 }; 

싶습니다!