improve tcp instantiations

Signed-off-by: Stefano Fiorentino <stefano.fiore84@gmail.com>
This commit is contained in:
Stefano Fiorentino 2020-04-06 16:03:45 +02:00
parent d611ca264f
commit 8872af2d86
2 changed files with 47 additions and 22 deletions

View File

@ -40,6 +40,47 @@ UVW_INLINE void TCPHandle::bind(const sockaddr &addr, Flags<Bind> opts) {
}
template<typename I>
UVW_INLINE void TCPHandle::bind(std::string ip, unsigned int port, Flags<Bind> opts)
{
typename details::IpTraits<I>::Type addr;
details::IpTraits<I>::addrFunc(ip.data(), port, &addr);
bind(reinterpret_cast<const sockaddr &>(addr), std::move(opts));
}
template<typename I>
UVW_INLINE void TCPHandle::bind(Addr addr, Flags<Bind> opts) {
bind<I>(std::move(addr.ip), addr.port, std::move(opts));
}
template<typename I>
UVW_INLINE Addr TCPHandle::sock() const noexcept {
return details::address<I>(&uv_tcp_getsockname, get());
}
template<typename I>
UVW_INLINE Addr TCPHandle::peer() const noexcept {
return details::address<I>(&uv_tcp_getpeername, get());
}
template<typename I>
UVW_INLINE void TCPHandle::connect(std::string ip, unsigned int port) {
typename details::IpTraits<I>::Type addr;
details::IpTraits<I>::addrFunc(ip.data(), port, &addr);
connect(reinterpret_cast<const sockaddr &>(addr));
}
template<typename I>
UVW_INLINE void TCPHandle::connect(Addr addr) {
connect<I>(std::move(addr.ip), addr.port);
}
UVW_INLINE void TCPHandle::connect(const sockaddr &addr) {
auto listener = [ptr = shared_from_this()](const auto &event, const auto &) {
ptr->publish(event);

View File

@ -135,11 +135,7 @@ public:
* @param opts Optional additional flags.
*/
template<typename I = IPv4>
void bind(std::string ip, unsigned int port, Flags<Bind> opts = Flags<Bind>{}) {
typename details::IpTraits<I>::Type addr;
details::IpTraits<I>::addrFunc(ip.data(), port, &addr);
bind(reinterpret_cast<const sockaddr &>(addr), std::move(opts));
}
void bind(std::string ip, unsigned int port, Flags<Bind> opts = Flags<Bind>{});
/**
* @brief Binds the handle to an address and port.
@ -158,27 +154,21 @@ public:
* @param opts Optional additional flags.
*/
template<typename I = IPv4>
void bind(Addr addr, Flags<Bind> opts = Flags<Bind>{}) {
bind<I>(std::move(addr.ip), addr.port, std::move(opts));
}
void bind(Addr addr, Flags<Bind> opts = Flags<Bind>{});
/**
* @brief Gets the current address to which the handle is bound.
* @return A valid instance of Addr, an empty one in case of errors.
*/
template<typename I = IPv4>
Addr sock() const noexcept {
return details::address<I>(&uv_tcp_getsockname, get());
}
Addr sock() const noexcept;
/**
* @brief Gets the address of the peer connected to the handle.
* @return A valid instance of Addr, an empty one in case of errors.
*/
template<typename I = IPv4>
Addr peer() const noexcept {
return details::address<I>(&uv_tcp_getpeername, get());
}
Addr peer() const noexcept;
/**
* @brief Establishes an IPv4 or IPv6 TCP connection.
@ -206,11 +196,7 @@ public:
* @param port The port to which to bind.
*/
template<typename I = IPv4>
void connect(std::string ip, unsigned int port) {
typename details::IpTraits<I>::Type addr;
details::IpTraits<I>::addrFunc(ip.data(), port, &addr);
connect(reinterpret_cast<const sockaddr &>(addr));
}
void connect(std::string ip, unsigned int port);
/**
* @brief Establishes an IPv4 or IPv6 TCP connection.
@ -222,9 +208,7 @@ public:
* @param addr A valid instance of Addr.
*/
template<typename I = IPv4>
void connect(Addr addr) {
connect<I>(std::move(addr.ip), addr.port);
}
void connect(Addr addr);
/**
* @brief Resets a TCP connection by sending a RST packet.