Socket Programming Cheat Sheet
Types and Structures
primitive types
typedef uint16_t in_port_t; /* 16-bit port number in network byte order */ typedef uint32_t in_addr_t; /* 32-bit IPv4 address in network byte order */
struct sockaddr
struct sockaddr {
uint8_t sa_length; /* length of structure */
sa_family_t sa_family; /* address family (e.g. AF_INET) */
char sa_data[14]; /* protocol-specific address */
};
In Microsoft Windows:
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
struct in_addr
struct in_addr {
in_addr_t s_addr; /* 32-bit IPv4 address in network byte order */
};
Microsoft Windows -- winsock.h and winsock2.h
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;
#define s_addr S_un.S_addr
/* can be used for most tcp & ip code */
#define s_host S_un.S_un_b.s_b2
/* host on imp */
#define s_net S_un.S_un_b.s_b1
/* network */
#define s_imp S_un.S_un_w.s_w2
/* imp */
#define s_impno S_un.S_un_b.s_b4
/* imp # */
#define s_lh S_un.S_un_b.s_b3
/* logical host */
};
typedef struct in_addr IN_ADDR;
typedef struct in_addr *PIN_ADDR;
typedef struct in_addr FAR *LPIN_ADDR;
struct sockaddr_in
struct sockaddr_in {
uint8_t sin_len; /* length of structure (16) */
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port; /* 16-bit TCP or UDP port number */
/* in network byte order */
struct in_addr sin_addr; /* 32-bit IPv4 address */
/* in network byte order */
char sin_zero[8]; /* unused */
};