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