bind()函数接受指向sockaddr
的指针,但在我看到的所有示例中,都使用了sockaddr_in
struct ,并将其强制转换为sockaddr
:
struct sockaddr_in name;
...
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
...
我不明白为什么要用sockaddr_in
struct .为什么不准备通过sockaddr
考试呢?
这只是惯例吗?
bind()函数接受指向sockaddr
的指针,但在我看到的所有示例中,都使用了sockaddr_in
struct ,并将其强制转换为sockaddr
:
struct sockaddr_in name;
...
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
...
我不明白为什么要用sockaddr_in
struct .为什么不准备通过sockaddr
考试呢?
这只是惯例吗?
不,这不仅仅是惯例.
sockaddr
是任何类型套接字操作的通用描述符,而sockaddr_in
是特定于基于IP的通信(IIRC,"in"代表"InterNet")的 struct .据我所知,这是一种"多态性":bind()
函数假装接受struct sockaddr *
,但实际上,它会假定传入了适当类型的 struct ;i、 e.与作为第一个参数给出的套接字类型相对应的套接字.