在进行socket连接时,为什么要对socket地址结构执行清0操作?

发布于 2022-09-07 23:23:36 字数 279 浏览 16 评论 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾其所爱 2022-09-14 23:23:36

大部分 system call 都使用的是 struct sockaddr 结构,而不是我们使用的 struct sockaddr_in 等结构,所以我们通常在调用 system call 时都会进行 类型转换。

如果你观察下 struct sockaddr_in 的结构,你会发现它有一个 sin_zero 的成员,正如它的名字,这个成员就是要置零,其存在的意义就是要和 struct sockaddr 结构对齐,长度一致。

有的系统可能不在意它是否置零,但有的系统会做判断的,可能会造成一些未定义的行为。所以,为了兼容性,还是要置零的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文