2013-03-28 65 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