在进行socket连接时,为什么要对socket地址结构执行清0操作?
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);
但是去掉第一句之后并不会产生什么影响 想知道这个清零的意义在哪里
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
大部分 system call 都使用的是 struct sockaddr 结构,而不是我们使用的 struct sockaddr_in 等结构,所以我们通常在调用 system call 时都会进行 类型转换。
如果你观察下 struct sockaddr_in 的结构,你会发现它有一个 sin_zero 的成员,正如它的名字,这个成员就是要置零,其存在的意义就是要和 struct sockaddr 结构对齐,长度一致。
有的系统可能不在意它是否置零,但有的系统会做判断的,可能会造成一些未定义的行为。所以,为了兼容性,还是要置零的