Skip to content

Commit

Permalink
修复endpoint判等的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
actboy168 committed Dec 13, 2024
1 parent c40713b commit f888e15
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
27 changes: 26 additions & 1 deletion bee/net/endpoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,31 @@ namespace bee::net {
}

bool endpoint::operator==(const endpoint& o) const noexcept {
return m_size == o.m_size && (0 == memcmp(m_data, o.m_data, m_size));
if (get_family() != o.get_family())
return false;
const sockaddr* saddr = addr();
switch (saddr->sa_family) {
case AF_INET: {
const sockaddr_in* sa = (struct sockaddr_in*)saddr;
const sockaddr_in* sb = (struct sockaddr_in*)o.addr();
if (sa->sin_port != sb->sin_port)
return false;
return 0 == memcmp(&sa->sin_addr, &sb->sin_addr, sizeof(sa->sin_addr));
}
case AF_INET6: {
const sockaddr_in6* sa = (struct sockaddr_in6*)saddr;
const sockaddr_in6* sb = (struct sockaddr_in6*)o.addr();
if (sa->sin6_port != sb->sin6_port)
return false;
return 0 == memcmp(&sa->sin6_addr, &sb->sin6_addr, sizeof(sa->sin6_addr));
}
case AF_UNIX: {
auto [type_a, path_a] = get_unix();
auto [type_b, path_b] = o.get_unix();
return (type_a == type_b) && (path_a == path_b);
}
default:
return false;
}
}
}
6 changes: 3 additions & 3 deletions bee/utility/zstring_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ namespace bee {
using string_view_base::size;
};
template <class CharT, class Traits>
constexpr bool operator==(const basic_zstring_view<CharT, Traits>& lhs, const basic_zstring_view<CharT, Traits>& rhs) noexcept {
return lhs.compare(rhs) == 0;
constexpr bool operator==(basic_zstring_view<CharT, Traits> lhs, basic_zstring_view<CharT, Traits> rhs) noexcept {
return lhs.size() == rhs.size() && Traits::compare(lhs.data(), rhs.data(), lhs.size()) == 0;
}
template <class CharT, class Traits, size_t N>
constexpr bool operator==(const basic_zstring_view<CharT, Traits>& lhs, const CharT (&rhs)[N]) noexcept {
constexpr bool operator==(basic_zstring_view<CharT, Traits> lhs, const CharT (&rhs)[N]) noexcept {
static_assert(N > 0);
return lhs.size() == (N - 1) && Traits::compare(lhs.data(), rhs, (N - 1)) == 0;
}
Expand Down

0 comments on commit f888e15

Please sign in to comment.