On Mon, Sep 19, 2016 at 4:46 AM, kang joni <kangjon...@gmail.com> wrote:
> how to check if client is connected using ipv4 or ipv6 in libuv?
> I have this code,
>
> struct sockaddr_storage cp;
> int ilen=sizeof(cp);
> uv_tcp_getpeername((uv_tcp_t*)client, (struct sockaddr*)&cp,&ilen);
> int ret=uv_ip6_name((const struct 
> sockaddr_in6*)&cp,(char*)ipname,sizeof(ipname));
> //I don't think this is correct, but I haven't any clues
> if (retip<0 || std::string("::")==ipname)
> {
>   retip=uv_ip4_name((const struct sockaddr_in*)&cp,(char*)ipname, 
> sizeof(ipname));
>
> }
>
> any corrections ? thanks

You can simply check if ilen == sizeof(struct sockaddr_in) or ilen ==
sizeof(struct sockaddr_in6) but a more thorough solution is to check
the address family:

  struct sockaddr *sa = (struct sockaddr *) &cp;
  switch (sa->sa_family) {
    case AF_INET:  /* ... */; break;
    case AF_INET6: /* ... */; break;
  }

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to libuv+unsubscr...@googlegroups.com.
To post to this group, send email to libuv@googlegroups.com.
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to