Ошибка привязки в сокете Android в образце исполняемого файла

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

Мой код вкратце:

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
}

root @ android: / # / data / local / tmp / hello-jni

ошибка привязки:30

1 ответ

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

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

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

Другие вопросы по тегам