我想创建一个套接字并将其绑定到接口 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));
}
任何帮助将不胜感激。