Прежде всего, ваш dst
недостаточно велик для адреса IPv6
:
unsigned char buf[sizeof(struct in6_addr)]; /* Since it's larger than in_addr */
int result = getaddrinfo(ip_address, NULL, NULL, buf);
Если адрес IPv4, buf
- это in_addr
, то есть uint32_t
.
uint32_t u;
memcpy(&u, buf, sizeof(u));
Если адрес IPv6, преобразование в long
на самом деле не имеет смысла.Вам нужно что-то шириной 128
бит или выкатываете свое.Этот последний бит не так прост, поэтому спросите себя: вы уверены, что нужно это?