0

我制作了一个通过 android ndk 构建的可执行二进制文件。我将二进制文件放在 /data/local/tmp 中。在二进制文件中,我尝试绑定一个套接字,稍后我想通过我的 android 应用程序进行监听。我已经获得了 root 权限,绑定仍然显示 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

4

1 回答 1

0

我自己能够解决这个问题。可能其他人在寻找这个可能会有所帮助。

  1. 我将套接字的类型从 Abstract 类型更改为 FileSystem 类型。
  2. 我将 unlink 语句放在函数的末尾接受系统调用中断之后,而不是像上面那样在 strcpy 之后。
  3. 最后我在我的二进制文件上运行了 chmod。

任何其他指针都会有所帮助。谢谢。

于 2013-09-11T12:12:57.270 回答