在示例可执行二进制文件中的android socket中绑定错误

时间:2013-09-10 15:42:24

标签: android native unix-socket

我已经通过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

1 个答案:

答案 0 :(得分:0)

我能够自己解决这个问题。可能其他寻找此事的人可能会觉得有帮助。

  1. 我将套接字的类型从Abstract类型更改为FileSystem类型。
  2. 我在接受系统调用中断之后将unlink语句放在函数的末尾,而不是像上面的strcpy之后那样。
  3. 最后我在我的二进制文件上运行了chmod。
  4. 任何其他指针都会有所帮助。感谢。