c - How do I get sin6_addr from an addrinfo? -


my addrinfo pointer looks this-

struct addrinfo hint, *res = null; 

i call addrinfo.

hint.ai_family = af_unspec;   ret = getaddrinfo(curhost, null, &hint, &res); 

curhost character array. doing

saddrv6.sin6_addr=*(res->ai_addr).sin6_addr 

is giving me error says

request member 'sin6_addr' in not structure or union. saddrv6 sockaddr_in6 struct. way fill sin6_addr info have in res? new c programming here .

the specific error you're getting because in:

*(res->ai_addr).sin6_addr 

the . operator binds more tightly *. change to:

(*res->ai_addr).sin6_addr 

which meant, better way use -> operator:

res->ai_addr->sin6_addr 

however, still doesn't work because ai_addr has useless opaque type struct sockaddr *, not struct sockaddr_in6 *. fix need cast pointer type points to:

((struct sockaddr_in6 *)res->ai_addr)->sin6_addr 

at point code should work. however, ai_addr member of struct addrinfo not meant accessed directly rather used abstractly , passed functions connect, bind, sendto, recvfrom, etc. @ point we're talking matter of style , programming practices rather correctness per language, though.

note if want ipv6 address sake of printing string, getnameinfo function ni_numerichost flag lets in abstract way without having poke through opaque struct sockaddr *.


Comments

Popular posts from this blog

php - Vagrant up error - Uncaught Reflection Exception: Class DOMDocument does not exist -

vue.js - Create hooks for automated testing -

Add new key value to json node in java -