我想创建一个套接字并将其绑定到接口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));
}
非常感谢任何帮助。
答案 0 :(得分:1)
不应该是bind
电话的这一部分:
(struct sockaddr*)&local
是
(struct sockaddr*)local
因为本地已经是一个指针?