iBe*_*wer 4 c++ sockets linux struct
我看到过类似的问题如下:
struct sockaddr_un v/s sockaddr - C(Linux)
但我仍然很不清楚 sockaddr_in 和 sockaddr 之间有什么区别,每个套接字方法/函数(即绑定、连接)似乎使用 sockaddr 而不是 sockaddr_in,这些结构可以互换吗?如果只使用 sockaddr 那么为什么会有 _in 呢?我更喜欢 _in 看起来更详细和排序。
如果我违反了任何规则,请删除该帖子;(
大多数时候第三个参数是addr_len,它是用来快速区分ipv4和ipv6的吗?
这sockaddr是一个通用套接字地址。如果您还记得的话,您可以通过相同的操作系统 API -来创建 TCP/IPv4、UDP/IPv4、UNIX、TCP/IPv6、UDP/IPv6 套接字(以及更多!)socket()。
所有这些不同的套接字类型都有不同的实际地址 - 由不同的字段组成。
sockaddr_in是实际的IPv4 地址布局(它有.sin_port和.sin_addr)。UNIX 域套接字将具有sockaddr_un特定于 UNIX 套接字系列的类型和定义的不同字段。
基本上sockaddr是字节的集合,它的大小是所有支持的(操作系统)套接字/地址系列的最大大小,以便它可以容纳所有支持的地址。