2013-03-28 66 views
0

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

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)); 
} 

任何帮助将不胜感激。

+0

可以发布logcat吗? – Anukool 2013-03-28 11:23:53

+0

03-28 17:24:42.782:D/our_activity(5613):ioctl success 03-28 17:24:42.782:D/our_activity(5613):local ip addr 219.64.74.5 03-28 17:24: 42.782:D/our_activity(5613):错误97字符串地址系列不支持的协议 03-28 17:24:42.782:D/our_activity(5613):需要IP主机www.google.com 03-28 17:24 :43.157:D/our_activity(5613):IP是173.194.38.146 – 2013-03-28 11:58:04

回答

1

不应该bind通话的这一部分:

(struct sockaddr*)&local 

(struct sockaddr*)local 

,因为当地已经是一个指针?

+0

非常感谢您指出。 :)不知何故错过了它 – 2013-03-28 12:49:51

+0

这是否解决了你的问题? – Michael 2013-03-28 17:36:48

+0

嗨嗨,谢谢,是的,这是问题。 – 2013-04-01 11:40:53