diff --git a/src/uvw/udp.hpp b/src/uvw/udp.hpp index 98fe0954..1e3f2ee3 100644 --- a/src/uvw/udp.hpp +++ b/src/uvw/udp.hpp @@ -70,8 +70,6 @@ public: class UDPHandle final: public Handle { - using Handle::Handle; - template static void recvCallback(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf, const sockaddr *addr, unsigned flags) { typename details::IpTraits::Type *aptr = reinterpret_cast::Type *>(addr); @@ -95,6 +93,14 @@ class UDPHandle final: public Handle { } } + explicit UDPHandle(std::shared_ptr ref) + : Handle{std::move(ref)}, tag{DEFAULT}, flags{} + { } + + explicit UDPHandle(std::shared_ptr ref, unsigned int f) + : Handle{std::move(ref)}, tag{FLAGS}, flags{f} + { } + public: using Membership = details::UVMembership; using Bind = details::UVUdpFlags; @@ -107,12 +113,9 @@ public: } bool init() { - return initialize(&uv_udp_init); - } - - template - bool init(T&& t, Args&&... args) { - return initialize(&uv_udp_init_ex, std::forward(t), std::forward(args)...); + return (tag == FLAGS) + ? initialize(&uv_udp_init_ex, flags) + : initialize(&uv_udp_init); } void open(OSSocketHandle sock) { @@ -203,6 +206,10 @@ public: void stop() { invoke(&uv_udp_recv_stop, get()); } + +private: + enum { DEFAULT, FLAGS } tag; + unsigned int flags; };