2013-09-10 5 views
0

Я создал исполняемый двоичный файл, созданный через android ndk. Я поместил двоичный файл в/data/local/tmp. В двоичном файле я пытаюсь связать сокет, который позже хочу прослушать через приложение для Android. У меня есть права на root, а bind показывает 30 как ошибку, что означает только файловую систему только для чтения. Может ли кто-нибудь сказать мне, что еще мне нужно, чтобы связать сокет?ошибка связывания в гнезде android в образце исполняемого двоичного кода

Мой код Коротко:

int serv_sock = -1, len; 
struct sockaddr_un serv_soc_addr; 

if ((serv_sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { 
    printf( "socket error:%d\n", errno); 
    return -1; // Terminatie DR 
} 

bzero(&serv_soc_addr, sizeof(serv_soc_addr)); 
serv_soc_addr.sun_family = AF_UNIX; 
strcpy(serv_soc_addr.sun_path, "iptable_socket"); 
unlink(serv_soc_addr.sun_path); 
len = strlen(serv_soc_addr.sun_path) + sizeof(serv_soc_addr.sun_family); 

if (0 != bind(serv_sock, (struct sockaddr*) &serv_soc_addr, len)) { 
    printf( "bind error:%d\n", errno); 
    close(serv_sock); 
    return -1; //Terminate DR 
} 

корень @ андроида:/#/данные/местные/TMP/привет-JNI

ошибка связывания: 30

ответ

0

Я в состоянии решить эту проблему самостоятельно. Возможно, кто-то другой, кто ищет это, может оказаться полезным.

  1. Я изменил тип сокета от абстрактного типа до типа FileSystem.
  2. Я положил инструкцию unlink в конце функции после разрыва системного вызова accept, а не сразу после strcpy, как указано выше.
  3. Наконец-то я запустил chmod в своем двоичном формате.

Любые другие указатели были бы полезны. Благодарю.