网络地址与 Socket 封装

第 9 课:网络地址与 Socket 封装 对应源文件: trantor/net/InetAddress.h / InetAddress.cc — IPv4/IPv6 地址封装 trantor/net/inner/Socket.h / Socket.cc — 跨平台 Socket RAII 封装 一、两个类在架构中的位置 1 2 3 4 5 6 7 TcpServer / TcpClient │ ▼ Acceptor / Connector │ ├─ InetAddress ← 描述"连谁/绑哪里" └─ Socket ← 持有实际的系统 fd,负责创建/配置/关闭 这两个类是"最底层的 C++ 包装": InetAddress:把 struct sockaddr_in/in6 包成一个类型安全的 C++ 对象 Socket:RAII 管理 socket fd,把 setsockopt/bind/listen/accept 包成成员函数 二、InetAddress — 双协议地址封装 2.1 核心存储 1 2 3 4 5 6 7 // InetAddress.h(精简) union { struct sockaddr_in addr_; // IPv4:16 字节 struct sockaddr_in6 addr6_; // IPv6:28 字节 }; bool isIpV6_; // 区分当前存的是哪种 bool isUnspecified_; // 是否是"未指定地址"(0.0.0.0 / ::) 为什么用 union? ...

March 20, 2025 · 8 min · 1617 words