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

的绑定()函数接受一个指针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

*,但是实际上,它将假定传入了适当的结构类型;即,与您给它作为第一个参数的套接字类型相对应的套接字。

以上是 为什么在调用bind()时将sockaddr_in转换为sockaddr? 的全部内容, 来源链接: utcz.com/qa/414335.html

回到顶部