如何解决套接字的系统调用Bind In c
| 在一次采访中,有人问我为什么需要计算绑定系统调用中绑定到的地址的大小。bind(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr))
意味着我想知道在绑定系统调用中具有第三个参数的目的是什么?
解决方法
因为
sockaddr
结构或多或少地充当sockaddr_in
之类的\“派生\”结构的\“基础\”结构。它几乎是一种继承机制。
sockaddr
包含可变长度数据,可由\4ѭ之类的\“派生\”结构使用,因此您需要精确确定\“派生\”结构的有效大小。
, C调用通常需要作为参数传递给它们的数据大小,这就是所有struct都在做的,否则,当从struct读取数据时,内部函数可能会尝试读取struct的边界,我们俩知道那很不好。
, 是支票。类型信息不会传递给函数,因此它使用大小来验证结构可能是正确的类型,或者至少足够大以至于不会写到越界内存中。
这也是一种面向未来的形式:如果该结构的更高版本具有更多字段,并迫使该结构增大大小,则接收调用可以在新旧之间进行区分,并且仅填充可能的数据量而不必担心写越界。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。