地址系列不支持android native中的错误

时间:2013-03-28 11:21:56

标签: android sockets native

我想创建一个套接字并将其绑定到接口IP地址,以便数据包仅在本机层的android上通过该接口。但是在bind()系统调用上我得到一个错误地址系列不受支持。但是我想我已经将地址族作为AF_INET。

local = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *));
memset(local,'\0',sizeof(sockaddr_in));
local->sin_family = AF_INET;

optval2 = "wlan0";
memset(&ifr, 0, sizeof(struct ifreq));
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), optval2);
if(ioctl(sock, SIOCGIFADDR, &ifr) == 0) {
    __android_log_print(3, DEBUG_TAG, "ioctl success");
}

ip = inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);
local->sin_addr.s_addr = inet_addr(ip);

local->sin_port = 0;
if(bind(sock, (struct sockaddr*)&local, sizeof(struct sockaddr_in)) < 0 ) {
    __android_log_print(3, DEBUG_TAG, "error %d string %s", errno, strerror(errno));
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

不应该是bind电话的这一部分:

(struct sockaddr*)&local

(struct sockaddr*)local

因为本地已经是一个指针?