sockaddr

image.png
image.png

__SOCKADDR_COMMON: 地址类型,比如 AF_INET
sa_data[14]: 拿14字节存IP地址和端口号, 端口2个字节就够,剩下的存地址

sockaddr_in

image.png

__SOCKADDR_COMMON: 地址类型,比如 AF_INET
sin_port: 端口号
sin_addr: ip地址
为了和 sockaddr结构体保持一样长度
来看一下in_addr结构体
image.png
为啥单拎出来结构体呢?
我的理解是:
1. 这样直接用 “=”就赋值了,不用memcpy

  1. 可能是为了好拓展?

gethostbyname

image.png
把ip地址或域名转换为hostent 结构体表达的地址。
函数声明:
struct hostent gethostbyname(const char name);
参数name,域名或者主机名,例如”192.168.1.3”、”www.freecplus.net”等。
返回值:如果成功,返回一个hostent结构指针,失败返回NULL。
gethostbyname只用于客户端。
gethostbyname只是把字符串的ip地址转换为结构体的ip地址,只要地址格式没错,一般不会返回错误。失败时不会设置errno的值。

hostent结构体

image.png
h_name: 主机名
h_aliases: 主机所有别名构成的字符串数组
h_addrtype: ip类型 ipv4 ipv6
h_length: ip地址长度
h_addr_list: 主机的IP地址