- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
u_long thisIp = htonl(this->sockaddr.sin_addr.S_un.S_addr);
u_long otherIp = htonl(other.sockaddr.sin_addr.S_un.S_addr);
u_short thisPort = htons(this->sockaddr.sin_port);
u_short otherPort = htons(other.sockaddr.sin_port);
// ip1 + port1 < ip2 + port2
if (thisIp < otherIp)
{
if (thisPort <= otherPort)
{
return true;
}
else
{
return ((unsigned)(thisPort - otherPort) < (unsigned)(otherIp - thisIp));
}
}
else
{
if (thisPort >= otherPort)
{
return false;
}
else
{
return ((unsigned)(thisIp - otherIp) < (unsigned)(otherPort - thisPort));
}
}
Сравнить IPv4 адрес + порт. Т.е., по сути, (thisIP + thisPort) < (otherIP + otherPort).
unsigned long long, приди!
Вот же!
З.Ы. Хотя, если порядок не нужен, проще заюзать хешмап и не париться с operator <...
Вот блять почему в С/С++ нельзя называть переменные по нормальному?
Ничето не мешает тебе назвать их SocketAddress
порты надо сравнивать только если адреса равны
Если компилять с O2, то производительность примерно как у написанных вручную сравнений, если без оптимизации - примерно на порядок медленнее.