結構:
sockaddr
struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ };
其中,sa_data將端口信息和地址信息混在一起了。不推薦直接操作該結構體,而是類型轉換而來。
sockaddr_in
struct sockaddr_in { __kernel_sa_family_t sin_family; /* Address family */ __be16 sin_port; /* Port number */ struct in_addr sin_addr; /* Internet address */ /* Pad to size of `struct sockaddr'. */ unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) - sizeof(unsigned short int) - sizeof(struct in_addr)]; };
in_addr
typedef uint32_t in_addr_t; struct in_addr { in_addr_t s_addr; };
通常的用法是:
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = inet_addr("192.168.0.1");
使用時,強轉:
(struct sockaddr *)&my_addr