- uslen = sizeof(sock_us);
- themlen = sizeof(sock_them);
- if ((getsockname(this->u->GetFd(),(sockaddr*)&sock_us,&uslen) || getpeername(this->u->GetFd(), (sockaddr*)&sock_them, &themlen)))
+ sockaddr* sock_us = new sockaddr[2];
+ sockaddr* sock_them = new sockaddr[2];
+ bool success = false;
+ uslen = sizeof(sockaddr_in);
+ themlen = sizeof(sockaddr_in);
+#ifdef IPV6
+ if (this->u->GetProtocolFamily() == AF_INET6)
+ {
+ themlen = sizeof(sockaddr_in6);
+ uslen = sizeof(sockaddr_in6);
+ success = ((getsockname(this->u->GetFd(),sock_us,&uslen) || getpeername(this->u->GetFd(), sock_them, &themlen)));
+ }
+ else
+ success = ((getsockname(this->u->GetFd(),sock_us,&uslen) || getpeername(this->u->GetFd(), sock_them, &themlen)));
+#else
+ success = ((getsockname(this->u->GetFd(),sock_us,&uslen) || getpeername(this->u->GetFd(), sock_them, &themlen)));
+#endif
+ if (success)