Prototype getnameinfo requests sockaddr not sockaddr_in?

The getnameinfo prototype requests sockaddr, but I only saw examples using sockaddr_in. Can this example be rewritten for sockaddr? sin_family becomes sa_family, but what about sin_port and sin_addr? How are they included in sa_data?

struct sockaddr{ unsigned short sa_family; char sa_data[14]; }; 

struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; };

 struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr(IPvar); sin.sin_port = 0; // If 0, port is chosen by system getnameinfo( (struct sockaddr *)&sin, sizeof(sin), buffervar, sizeof(buffervar), NULL, 0, 0); 
+4
source share
1 answer

struct sockaddr is a "superclass" of specific protocol address structures, such as struct sockaddr_in , struct sockaddr_in6 and struct sockaddr_un , etc. getnameinfo(3) sends a specific execution path based on the address family (member sa_family .)

As far as memory is concerned, the three members of struct sockaddr_in are superimposed on the struct sockaddr sa_data . Take a look at Chapter 3 of the UnP book .

+4
source

Source: https://habr.com/ru/post/1305993/


All Articles