According to linux kernel documentation, (https://www.kernel.org/doc/htmldocs/networking/API-struct-sock.html) struct sock has a member named sk_rcv_saddr
which can be equated to struct cnic_sockaddr *saddr
cnic_sockaddr
has local and remote sockaddr_in structure members and you can get ip address from it. For exemple, Im not sure, but...
struct cnic_sockaddr saddr = sk.sk_rcv_saddr;
where sk is sock structure variable.
so your sockaddr_in is
saddr.remote.v4
and you can parse it like that:
char* parse_sinaddr(const struct in_addr saddr)
{
static char ip_str[16];
bzero(ip_str, sizeof(ip_str));
int printed_bytes = 0;
printed_bytes = snprintf(ip_str, sizeof(ip_str), "%d.%d.%d.%d",
(saddr.s_addr&0xFF),
((saddr.s_addr&0xFF00)>>8),
((saddr.s_addr&0xFF0000)>>16),
((saddr.s_addr&0xFF000000)>>24));
if (printed_bytes > sizeof(ip_str)) return NULL;
return ip_str;
}
char *ip_str = parse_sinaddr(saddr.remote.v4.sin_addr.in_addr);