From db1028c58d6cb2a389078ff7620b3b8997f40b8b Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 13 Feb 2019 04:59:48 +0100 Subject: [PATCH 1/4] src: extract common sockaddr creation code This commit extracts code to create sockaddr which is shared by both UDPWrap::DoBind and UDPWrap::DoSend. --- src/udp_wrap.cc | 48 ++++++++++++++++++------------------------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index e4aca28c89500e..7378a641f1ca91 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -175,6 +175,20 @@ void UDPWrap::GetFD(const FunctionCallbackInfo& args) { args.GetReturnValue().Set(fd); } +int uv_sockaddr_for_family(int address_family, + const char* address, + const unsigned short port, + struct sockaddr* addr) { + switch (address_family) { + case AF_INET: + return uv_ip4_addr(address, port, reinterpret_cast(addr)); + case AF_INET6: + return uv_ip6_addr(address, port, reinterpret_cast(addr)); + default: + CHECK(0 && "unexpected address family"); + ABORT(); + } +} void UDPWrap::DoBind(const FunctionCallbackInfo& args, int family) { UDPWrap* wrap; @@ -191,21 +205,8 @@ void UDPWrap::DoBind(const FunctionCallbackInfo& args, int family) { if (!args[1]->Uint32Value(ctx).To(&port) || !args[2]->Uint32Value(ctx).To(&flags)) return; - char addr[sizeof(sockaddr_in6)]; - int err; - - switch (family) { - case AF_INET: - err = uv_ip4_addr(*address, port, reinterpret_cast(&addr)); - break; - case AF_INET6: - err = uv_ip6_addr(*address, port, reinterpret_cast(&addr)); - break; - default: - CHECK(0 && "unexpected address family"); - ABORT(); - } - + struct sockaddr addr; + int err = uv_sockaddr_for_family(family, address.out(), port, &addr); if (err == 0) { err = uv_udp_bind(&wrap->handle_, reinterpret_cast(&addr), @@ -392,21 +393,8 @@ void UDPWrap::DoSend(const FunctionCallbackInfo& args, int family) { req_wrap->msg_size = msg_size; - char addr[sizeof(sockaddr_in6)]; - int err; - - switch (family) { - case AF_INET: - err = uv_ip4_addr(*address, port, reinterpret_cast(&addr)); - break; - case AF_INET6: - err = uv_ip6_addr(*address, port, reinterpret_cast(&addr)); - break; - default: - CHECK(0 && "unexpected address family"); - ABORT(); - } - + struct sockaddr addr; + int err = uv_sockaddr_for_family(family, address.out(), port, &addr); if (err == 0) { err = req_wrap->Dispatch(uv_udp_send, &wrap->handle_, From 4b164041ffab30eb69166b6d2078915f9ac9b8af Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Wed, 13 Feb 2019 12:56:55 +0100 Subject: [PATCH 2/4] squash!: use sockaddr_storage --- src/udp_wrap.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 7378a641f1ca91..5bf61585cc4f7b 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -178,7 +178,7 @@ void UDPWrap::GetFD(const FunctionCallbackInfo& args) { int uv_sockaddr_for_family(int address_family, const char* address, const unsigned short port, - struct sockaddr* addr) { + struct sockaddr_storage* addr) { switch (address_family) { case AF_INET: return uv_ip4_addr(address, port, reinterpret_cast(addr)); @@ -205,11 +205,11 @@ void UDPWrap::DoBind(const FunctionCallbackInfo& args, int family) { if (!args[1]->Uint32Value(ctx).To(&port) || !args[2]->Uint32Value(ctx).To(&flags)) return; - struct sockaddr addr; - int err = uv_sockaddr_for_family(family, address.out(), port, &addr); + struct sockaddr_storage addr_storage; + int err = uv_sockaddr_for_family(family, address.out(), port, &addr_storage); if (err == 0) { err = uv_udp_bind(&wrap->handle_, - reinterpret_cast(&addr), + reinterpret_cast(&addr_storage), flags); } @@ -393,14 +393,14 @@ void UDPWrap::DoSend(const FunctionCallbackInfo& args, int family) { req_wrap->msg_size = msg_size; - struct sockaddr addr; - int err = uv_sockaddr_for_family(family, address.out(), port, &addr); + struct sockaddr_storage addr_storage; + int err = uv_sockaddr_for_family(family, address.out(), port, &addr_storage); if (err == 0) { err = req_wrap->Dispatch(uv_udp_send, &wrap->handle_, *bufs, count, - reinterpret_cast(&addr), + reinterpret_cast(&addr_storage), OnSend); } From 60270a902394c11b39da24004161775487b5ff0d Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Thu, 14 Feb 2019 08:54:46 +0100 Subject: [PATCH 3/4] squash!: remove unreachable ABORT call --- src/udp_wrap.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index 5bf61585cc4f7b..d983d7a146b821 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -186,7 +186,6 @@ int uv_sockaddr_for_family(int address_family, return uv_ip6_addr(address, port, reinterpret_cast(addr)); default: CHECK(0 && "unexpected address family"); - ABORT(); } } From b297df190aafc29d8b9675905dd87a0d43018fce Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Fri, 15 Feb 2019 05:27:07 +0100 Subject: [PATCH 4/4] squash!: remove uv_ prefix --- src/udp_wrap.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/udp_wrap.cc b/src/udp_wrap.cc index d983d7a146b821..be1f59d2c52863 100644 --- a/src/udp_wrap.cc +++ b/src/udp_wrap.cc @@ -175,10 +175,10 @@ void UDPWrap::GetFD(const FunctionCallbackInfo& args) { args.GetReturnValue().Set(fd); } -int uv_sockaddr_for_family(int address_family, - const char* address, - const unsigned short port, - struct sockaddr_storage* addr) { +int sockaddr_for_family(int address_family, + const char* address, + const unsigned short port, + struct sockaddr_storage* addr) { switch (address_family) { case AF_INET: return uv_ip4_addr(address, port, reinterpret_cast(addr)); @@ -205,7 +205,7 @@ void UDPWrap::DoBind(const FunctionCallbackInfo& args, int family) { !args[2]->Uint32Value(ctx).To(&flags)) return; struct sockaddr_storage addr_storage; - int err = uv_sockaddr_for_family(family, address.out(), port, &addr_storage); + int err = sockaddr_for_family(family, address.out(), port, &addr_storage); if (err == 0) { err = uv_udp_bind(&wrap->handle_, reinterpret_cast(&addr_storage), @@ -393,7 +393,7 @@ void UDPWrap::DoSend(const FunctionCallbackInfo& args, int family) { req_wrap->msg_size = msg_size; struct sockaddr_storage addr_storage; - int err = uv_sockaddr_for_family(family, address.out(), port, &addr_storage); + int err = sockaddr_for_family(family, address.out(), port, &addr_storage); if (err == 0) { err = req_wrap->Dispatch(uv_udp_send, &wrap->handle_,