@@ -96,13 +96,13 @@ ResolvedAddr::ResolvedAddr(const HostAddr& hostAddr, bool resolveAll) : lookup((
9696
9797 if (hostAddr.ipv6 )
9898 {
99- auto * addr6 = ( sockaddr_in6*) addr->ai_addr ;
99+ auto * addr6 = reinterpret_cast < sockaddr_in6*>( addr->ai_addr ) ;
100100 addr6->sin6_family = AF_INET6;
101101 addr6->sin6_port = htons (s25util::fromStringClassic<unsigned short >(hostAddr.port ));
102102 addr6->sin6_addr = in6addr_loopback;
103103 } else
104104 {
105- auto * addr4 = ( sockaddr_in*) addr->ai_addr ;
105+ auto * addr4 = reinterpret_cast < sockaddr_in*>( addr->ai_addr ) ;
106106 addr4->sin_family = AF_INET;
107107 addr4->sin_port = htons (s25util::fromStringClassic<unsigned short >(hostAddr.port ));
108108 addr4->sin_addr .s_addr = inet_addr (" 127.0.0.1" );
@@ -125,9 +125,9 @@ ResolvedAddr::~ResolvedAddr()
125125
126126PeerAddr::PeerAddr (unsigned short port)
127127{
128- addr.ss_family = AF_INET;
129- reinterpret_cast <sockaddr_in&>( addr) .sin_addr .s_addr = INADDR_BROADCAST;
130- reinterpret_cast <sockaddr_in&>( addr) .sin_port = htons (port);
128+ addr.sa_in . sin_family = AF_INET;
129+ addr. sa_in .sin_addr .s_addr = INADDR_BROADCAST;
130+ addr. sa_in .sin_port = htons (port);
131131}
132132
133133std::string PeerAddr::GetIp () const
@@ -137,12 +137,12 @@ std::string PeerAddr::GetIp() const
137137
138138sockaddr* PeerAddr::GetAddr ()
139139{
140- return reinterpret_cast <sockaddr*>( &addr) ;
140+ return &addr. sa ;
141141}
142142
143143const sockaddr* PeerAddr::GetAddr () const
144144{
145- return reinterpret_cast < const sockaddr*>( &addr) ;
145+ return &addr. sa ;
146146}
147147
148148Socket::Socket ()
@@ -786,15 +786,15 @@ int Socket::BytesWaiting(unsigned* received) const
786786 */
787787std::string Socket::GetPeerIP () const
788788{
789- sockaddr_storage peer;
790- socklen_t length = sizeof (sockaddr_storage );
789+ address_t peer;
790+ socklen_t length = sizeof (peer );
791791
792792 // Remotehost-Adresse holen
793- if (getpeername (socket_, (sockaddr*) &peer, &length) == SOCKET_ERROR)
793+ if (getpeername (socket_, &peer. sa , &length) == SOCKET_ERROR)
794794 return " " ;
795795
796796 // in Text verwandeln
797- return IpToString ((sockaddr*) &peer);
797+ return IpToString (&peer. sa );
798798}
799799
800800/* *
@@ -804,15 +804,15 @@ std::string Socket::GetPeerIP() const
804804 */
805805std::string Socket::GetSockIP () const
806806{
807- sockaddr_storage peer;
808- socklen_t length = sizeof (sockaddr_storage );
807+ address_t peer;
808+ socklen_t length = sizeof (peer );
809809
810810 // Localhost-Adresse holen
811- if (getsockname (socket_, (sockaddr*) &peer, &length) == SOCKET_ERROR)
811+ if (getsockname (socket_, &peer. sa , &length) == SOCKET_ERROR)
812812 return " " ;
813813
814814 // in Text verwandeln
815- return IpToString ((sockaddr*) &peer);
815+ return IpToString (&peer. sa );
816816}
817817
818818/* *
@@ -832,44 +832,31 @@ SOCKET Socket::GetSocket() const
832832std::string Socket::IpToString (const sockaddr* addr)
833833{
834834 std::array<char , 256 > temp{};
835-
836- #ifdef _WIN32
837- union
838- {
839- sockaddr base;
840- sockaddr_in ipv4;
841- sockaddr_in6 ipv6;
842- } copy;
843- std::memset (©, 0 , sizeof (copy));
835+ address_t addrCopy{};
844836 size_t size;
845837 if (addr->sa_family == AF_INET)
846838 {
847839 size = sizeof (sockaddr_in);
848- std::memcpy (©.ipv4 , addr, size);
849- copy.ipv4 .sin_port = 0 ;
840+ std::memcpy (&addrCopy.sa_in , addr, size);
850841 } else
851842 {
852843 size = sizeof (sockaddr_in6);
853- std::memcpy (©.ipv6 , addr, size);
854- copy.ipv6 .sin6_port = 0 ;
844+ std::memcpy (&addrCopy.sa_in6 , addr, size);
855845 }
856846
857- DWORD le = GetLastError ();
858- DWORD templen = sizeof (temp);
859- WSAAddressToStringA (©.base , static_cast <DWORD>(size), nullptr , temp.data (), &templen);
847+ #ifdef _WIN32
848+ const auto le = GetLastError ();
849+ DWORD templen = temp.size ();
850+ WSAAddressToStringA (&addrCopy.sa , static_cast <DWORD>(size), nullptr , temp.data (), &templen);
860851 SetLastError (le);
861852#else
862853 const void * ip;
863-
864854 if (addr->sa_family == AF_INET)
865- {
866- ip = &(((const sockaddr_in*)addr)->sin_addr );
867- } else
868- {
869- ip = &(((const sockaddr_in6*)addr)->sin6_addr );
870- }
855+ ip = &addrCopy.sa_in .sin_addr ;
856+ else
857+ ip = &addrCopy.sa_in6 .sin6_addr ;
871858
872- inet_ntop (addr->sa_family , ip, temp.data (), sizeof ( temp));
859+ inet_ntop (addr->sa_family , ip, temp.data (), temp. size ( ));
873860#endif
874861
875862 return temp.data ();
0 commit comments