netinet/in.h
-
引用
#include <netinet/in.h>- 推荐使用<arpa/inet.h>替换,包含了其中所有内容
-
定义了sockaddr_in结构
struct sockaddr_in { sa_family_t sin_family in_port_t sin_port struct in_addr sin_addr unsigned char sin_zero[8] }-
sa_family_t 地址族
typedef uint16_t sa_family_t- AF_INET —— IPv4【常用】
- AF_INET6 —— IPv6
- AF_LOCAL —— 本地UNIX
-
in_port_t 端口号
typedef uint16_t in_port_t; -
in_addr IP地址
typedef uint32_t in_addr_t; struct in_addr { in_addr_t s_addr; };- 这里要用inet_addr把十进制ip转换为二进制ip,再赋予内部s_addr
-
sin_zero 不使用,但必须填充为0
- 使用<string.h>提供的memset函数预先置0
memset(&serv_addr, 0, sizeof(serv_addr))
- 使用<string.h>提供的memset函数预先置0
-
此结构的作用
- <sys/socket.h>中定义的sockaddr把端口和地址都混杂在sa_data中,难以赋值
- 这个结构的出现,把端口和地址分开存放,赋值很方便
- 长度相同,只要进行一次指针转换就行
(struct sockaddr*) &serv_addr
-
-
宏
#define INADDR_ANY (u_int32_t)0x00000000 #define INADDR_BROADCAST (u_int32_t)0xffffffff- INADDR_ANY 用于自动分配本机的IP地址