Linux FreeBSD Solaris Cygwin gethostbyname y y y y gethostbyname_r n n y - gethostbyname2 y y y(*) - getaddrinfo y y y - res_search (res_*) y y y - Linux, Solaris, Cygwin: struct sockaddr_in{ sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; /* ...*/ }; FreeBSD: struct sockaddr_in { u_char sin_len; u_char sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; Linux, Solaris, Cygwin: struct sockaddr_in6 { sa_family_t sin6_family; in_port_t sin6_port; uint32_t sin6_flowinfo; struct in6_addr sin6_addr; /*...*/ }; FreeBSD: struct sockaddr_in6 { u_int8_t sin6_len; /* length of this struct(sa_family_t)*/ u_int8_t sin6_family; /* AF_INET6 (sa_family_t) */ u_int16_t sin6_port; /* Transport layer port # (in_port_t)*/ u_int32_t sin6_flowinfo; /* IP6 flow information */ struct in6_addr sin6_addr; /* IP6 address */ u_int32_t sin6_scope_id; /* intface scope id */ }; sockaddr_in sockaddr_in6 Linux or or (*) FreeBSD Solaris Cygwin or or (*) - on linux netinet/in.h -> from GNU libc, linux/in*.h from the kernel. struct sockaddr: Linux: (sa_family_t= unsigned short) struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; FreeBSD: (sa_family_t = u_char) struct sockaddr { u_char sa_len; /* total length */ sa_family_t sa_family; /* address family */ char sa_data[14]; /* actually longer; address value */ };