gpt4 book ai didi

c - 为什么在 C 中绑定(bind)套接字时需要地址长度参数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:37 25 4
gpt4 key购买 nike

我开始在 C 中使用套接字,当我使用 bind() 系统调用将套接字绑定(bind)到地址时,我必须指定 addrlen 参数。

为什么套接字中需要地址长度?

最佳答案

绑定(bind)函数(系统调用)是通用函数,它必须处理多种类型的地址,IPv4、IPv6、蓝牙、unix 套接字和...每种地址类型的大小可能与其他类型不同,因此您必须创建它通过传递其大小清除绑定(bind)您要传递的地址。

bind 是一个系统调用,系统调用只是一个包装函数,在用户空间中用于与内核空间交互。当您通过套接字系统调用创建套接字时,将在调用进程的文件描述符表中创建一条记录。记录本身包括套接字的类型。当你调用 bind 并将地址传递给它时,地址应该被复制到内核空间,但是地址有多大? bind 系统调用不知道您正在绑定(bind)的套接字,因为在内核空间和用户空间绑定(bind)函数中创建的套接字记录及其各自的系统调用不知道它需要的大小。实际上,绑定(bind)只是系统调用,它将地址数据复制到内核空间并通知内核。

另一方面,绑定(bind)无法在运行时确定地址时间,因为纯 C 中没有运行时类型检查。

所以此时绑定(bind)不知道地址,你应该指定地址大小,这样地址结构将被完整地复制到内核空间。

关于c - 为什么在 C 中绑定(bind)套接字时需要地址长度参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com