织梦CMS - 轻松建站从此开始!

罗索

socket编程之设备绑定

jackyhwei 发布于 2010-12-10 10:20 点击:次 
sockaddr,sockaddr_ll。可能大家都知道前者,因为在绑定的时候调用bind函数都要转换成sockaddr*的。所以就不介绍了,相信大家都了解了,如果不了解,google一下,非常详细。
TAG:

 一般介绍socket的书籍中介绍socket的绑定都是绑定其ip地址。其对应的结构体是sockaddr_in。那么大家是否了解其它的结构体呢?

sockaddr,sockaddr_ll。可能大家都知道前者,因为在绑定的时候调用bind函数都要转换成sockaddr*的。所以就不介绍了,相信大家都了解了,如果不了解,google一下,非常详细。

那么对于sockaddr_ll,下边就介绍他

  1. struct sockaddr_ll 
  2. unsigned short  sll_family; 
  3. __be16 sll_protocol; 
  4. int sll_ifindex; 
  5. unsigned short sll_hatype; 
  6. unsigned char sll_pkttype; 
  7. unsigned char sll_halen; 
  8. unsigned char sll_addr[8]; 
  9. }; 

绑定设备的时候只要把你要帮顶的设备的索引号赋给 sll_ifindex即可。

下边给一段使用它的代码:

  1. ..... 
  2. int skt = socket(PF_PACKET,SOCK_RAW, htons(ETH_P_ALL)); 
  3. int caplen = 65535; 
  4. int ret = setsockopt(skt,SOL_SOCKET,SO_RCVBUF, &caplen, sizeof(caplen)); 
  5. struct ifreq ifstruct; 
  6. strcpy(ifstruct.ifr_name, argv[1]); 
  7. ioctl(skt, SIOCGIFINDEX, &ifstruct); 
  8. sockaddr_ll sll; 
  9. memset( &sll, 0, sizeof(sll) ); 
  10. sll.sll_family = AF_PACKET; 
  11. sll.sll_ifindex = ifstruct.ifr_ifindex; 
  12. sll.sll_protocol = htons(ETH_P_ALL); 
  13. int rc = bind(skt, (struct sockaddr *)&sll, sizeof(sll));    
  14. ... 

原文出处:http://blog.csdn.net/wfqxx/archive/2009/06/23/4290619.aspx

(wfqxx)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201012/10592.html]
本文出处:CSDN博客 作者:wfqxx
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容