raw socket 绑定指定接口失败。
首先是创建一个套接口:socket(PF_SOCKET, SOCK_RAW, htonl(ETH_P_ALL));
然后利用ioctl取出接口eth1的各种参数:ifindex,mac, ip 等等。
最后绑定该socket到这个eth1接口。(我需要监听来自这个网口的广播或者其他请求报文)
sockaddr_ll.
sockaddr_ll.sll_family = PF_PACKET;
sockaddr_ll.sll_protocol = htons( ETH_P_ALL );
sockaddr_ll.sll_ifindex = 3; /*AUI */
sockaddr_ll.sll_hatype = ARPHRD_ETHER;
sockaddr_ll.sll_pkttype = PACKET_OTHERHOST;
sockaddr_ll.sll_halen = ETH_ALEN;
memcpy( sockaddr_ll.sll_addr, mac, 6);
最后bind时失败,errno = EINVAL;我打印了sockaddr_ll的各变量的值,没发现什么问题。
我这个bind到底失败在哪?求指导!谢谢。 回复 1# shaohui973
af_packet.c
貌似只有这两种情况返回 EINVAL :
if (addr_len < sizeof(struct sockaddr_ll))
return -EINVAL;
if (sll->sll_family != AF_PACKET)
return -EINVAL;
看看你的 addr_len 传的对不对,bind 第三个参数。
页:
[1]