linux c socket 问题总结(未解)

1231阅读 0评论2012-01-16 jinxinxin163
分类:LINUX

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.
上一篇:dup和dup2重定向
下一篇:linux void main() and int main()