0

我想创建一个套接字并将其绑定到接口 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));
}

任何帮助将不胜感激。

4

1 回答 1

1

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

(struct sockaddr*)&local

(struct sockaddr*)local

因为 local 已经是一个指针?

于 2013-03-28T12:26:05.297 回答