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 */
};