Chinaunix首页 | 论坛 | 博客
  • 博客访问: 572382
  • 博文数量: 70
  • 博客积分: 3736
  • 博客等级: 中校
  • 技术积分: 1728
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-08 09:15
文章分类
文章存档

2014年(1)

2012年(21)

2011年(7)

2010年(28)

2009年(13)

分类: LINUX

2012-01-16 09:51:37

1.socket SOCK_RAW支持的问题
  1. #include
  2. #include
  3. #include
  4. #include
  5. void main()
  6. {
  7. int fd;
  8. if((fd = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) == -1)
  9. perror("socket failed\n");
  10. }
在我的fedora 11上执行,结果:
[root@localhost socket]# ./1test
socket failed
: Protocol not supported
为什么?
2.struct sockaddr_in6强制转换为sockaddr的问题
在一般的ipv6应用程序里,我们常可以看到这样的代码:
  1. struct sockaddr_in6 client_address;
  2. client_sockfd = accept(server_sockfd,
  3. (struct sockaddr *)&client_address, &client_len);
测试发现:
  1. #include
  2. #include
  3. #include
  4. void main()
  5. {
  6. printf("sizeof sockaddr is %d\n", sizeof(struct sockaddr));
  7. printf("sizeof sockaddr_in is %d\n", sizeof(struct sockaddr_in));
  8. printf("sizeof sockaddr_in6 is %d\n", sizeof(struct sockaddr_in6));
  9. }
sizeof(struct sockaddr) is 16
sizeof(struct sockaddr_in) is 16
sizeof(struct sockaddr_in6) is 28
那么sockaddr_in6强制转换为sockaddr之后,不就溢出了么?
3.
阅读(1154) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~