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/