The bind()函数接受一个指向a的指针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.与您作为第一个参数提供的套接字类型相对应的一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)