ソケットを作成し、それをインターフェイスの IP アドレスにバインドして、パケットがネイティブ レイヤーの Android でのみそのインターフェイスを通過するようにしたいと考えました。しかし、bind() システム コールで、Address family not supported というエラーが表示されます。しかし、私はアドレス ファミリを 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));
}
どんな助けでも大歓迎です。