的绑定()函数接受一个指针sockaddr,但在我看到所有的实施例中,sockaddr_in结构来代替,并且被转换为sockaddr:
sockaddr
sockaddr_in
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()
struct sockaddr *