gpt4 book ai didi

c - 为什么我们在调用 bind() 时将 sockaddr_in 转换为 sockaddr?

转载 作者:IT老高 更新时间:2023-10-28 12:38:04 24 4
gpt4 key购买 nike

bind()函数接受一个指向 sockaddr 的指针,但在我见过的所有示例中,都使用了 sockaddr_in 结构,并被强制转换为 sockaddr :

struct sockaddr_in name;
...
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
...

我无法理解为什么要使用 sockaddr_in 结构。为什么不直接准备并传递一个 sockaddr

只是约定俗成吗?

最佳答案

不,这不仅仅是惯例。

sockaddr 是任何类型的套接字操作的通用描述符,而 sockaddr_in 是特定于基于 IP 的通信的结构(IIRC,“in”代表“Internet ”)。据我所知,这是一种“多态性”:bind() 函数假装采用 struct sockaddr *,但实际上它会假设传入适当类型的结构;一世。 e.一个对应于您作为第一个参数提供的套接字类型。

关于c - 为什么我们在调用 bind() 时将 sockaddr_in 转换为 sockaddr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099041/

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