1.我看socket连接的时候 书上都会用memset或者bzero函数对地址结构体进行清零操作
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
inet_pton(AF_INET, ip, &server_addr.sin_addr);
server_addr.sin_port = htons(port);
但是去掉第一句之后并不会产生什么影响 想知道这个清零的意义在哪里
1.我看socket连接的时候 书上都会用memset或者bzero函数对地址结构体进行清零操作
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family = AF_INET;
inet_pton(AF_INET, ip, &server_addr.sin_addr);
server_addr.sin_port = htons(port);
但是去掉第一句之后并不会产生什么影响 想知道这个清零的意义在哪里
7 回答5.4k 阅读
4 回答4.1k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答853 阅读✓ 已解决
2 回答3.3k 阅读
1 回答3.3k 阅读
大部分 system call 都使用的是 struct sockaddr 结构,而不是我们使用的 struct sockaddr_in 等结构,所以我们通常在调用 system call 时都会进行 类型转换。
如果你观察下 struct sockaddr_in 的结构,你会发现它有一个 sin_zero 的成员,正如它的名字,这个成员就是要置零,其存在的意义就是要和 struct sockaddr 结构对齐,长度一致。
有的系统可能不在意它是否置零,但有的系统会做判断的,可能会造成一些未定义的行为。所以,为了兼容性,还是要置零的