1、sockaddr_in
struct sockaddr_in {
short sin_family;
u_short sin_port; // 端口
struct in_addr sin_addr; // IP地址,long类型,4字节
char sin_zero[8];
};
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
2、sockaddr. 与sockaddr_in大小一致,含义类似
struct sockaddr {
u_short sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};
3、端口转换
htons,htonl:本地转网络,就是小端法转大端法,字节反序,比如0x1234转换后就是0x3412
ntohs,ntohl:反向转换
4、ip转换
inet_ntoa:long转换成stirng
inet_addr:string转换成long
实现,比如long为0x1183120a,网络到本地都需要反序一下:0x0a.0x12.0x83.0x11即:10.18.131.17
反之亦然
网络使用大端法,windows操作系统本地使用小端法
5、fd_set
#define FD_SETSIZE 64
typedef struct fd_set {
u_int fd_count; /* how many are SET? */
SOCKET fd_array[FD_SETSIZE]; /* an array of SOCKETs */
} fd_set;
FD_SET(sock_tcp_listern_, &fd_socket);
#define FD_SET(fd, set) do { \
if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) \
((fd_set FAR *)(set))->fd_array[((fd_set FAR *)(set))->fd_count++]=(fd);\
看得出来FD_SET比较简单,就是将socket赋值给fd_array,按照数组最低位赋值
6、