为什么在调用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