c - Address family of socket is mentioned in structure and socket creation why? -
my doubt on code of lines in socket program. family of address specified in serv_addr.sin_family = af_inet; sockaddr_in structure, why should mention same in socket(af_inet, sock_stream, 0); socket creation. family address in 2 sentence mean?
struct sockaddr_in serv_addr;  listenfd = socket(af_inet, sock_stream, 0);//here   serv_addr.sin_family = af_inet;//and here serv_addr.sin_addr.s_addr = htonl(inaddr_any); 
socket() creates new socket.  needs know address family knows kind of addresses allowed work with, whether ipv4, ipv6, ipx, netlink, etc.  address family dictates layout , format address values.  instance, af_inet allows ipv4 addresses, whereas af_inet6 allows ipv6 addresses (and ipv4 addresses if socket set dual-stack mode on platforms support feature).
every sockaddr_... structure has family field.  sockaddr_... structures can passed around various functions, need know type of address receiving input, , can specify type of address returning output.
the sockaddr_in structure specific ipv4 addresses only, sin_addr field specifies ipv4 address 32bit integer in network byte order.  same not true of other sockaddr_... structures.
there special sockaddr_storage structure typically used when writing code works multiple addresses families, when calling functions can accept multiple sockaddr_... types.
so important not socket told address family is, important individual addresses specify own types well. typically, these values match each other (except in case of dual-stack sockets).