The definitive reference is the standard.
The C standard defines size_t and says it's defined in <stddef.h> (on GNU/Linux that header is provided by GCC) and POSIX requires it to be defined after including <sys/types.h>
The POSIX standard defines sockaddr_in6 in <netinet/in.h>
also for eg : size_t, which is typically an unsigned int , why we define > size_t val ; rather than unsigned int val ; 
Because it might not be unsigned int. On my platform it's unsigned long, so by writing size_t you get a type guaranteed to be able to represent the necessary range of values. Using unsigned int doesn't guarantee that.