Skip to content

Commit 57469e6

Browse files
danbevMylesBorins
authored andcommitted
src: extract common sockaddr creation code
This commit extracts code to create sockaddr which is shared by both UDPWrap::DoBind and UDPWrap::DoSend. PR-URL: #26070 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Richard Lau <[email protected]>
1 parent bc5e04b commit 57469e6

File tree

1 file changed

+19
-32
lines changed

1 file changed

+19
-32
lines changed

src/udp_wrap.cc

+19-32
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,19 @@ void UDPWrap::GetFD(const FunctionCallbackInfo<Value>& args) {
165165
args.GetReturnValue().Set(fd);
166166
}
167167

168+
int sockaddr_for_family(int address_family,
169+
const char* address,
170+
const unsigned short port,
171+
struct sockaddr_storage* addr) {
172+
switch (address_family) {
173+
case AF_INET:
174+
return uv_ip4_addr(address, port, reinterpret_cast<sockaddr_in*>(addr));
175+
case AF_INET6:
176+
return uv_ip6_addr(address, port, reinterpret_cast<sockaddr_in6*>(addr));
177+
default:
178+
CHECK(0 && "unexpected address family");
179+
}
180+
}
168181

169182
void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) {
170183
UDPWrap* wrap;
@@ -181,24 +194,11 @@ void UDPWrap::DoBind(const FunctionCallbackInfo<Value>& args, int family) {
181194
if (!args[1]->Uint32Value(ctx).To(&port) ||
182195
!args[2]->Uint32Value(ctx).To(&flags))
183196
return;
184-
char addr[sizeof(sockaddr_in6)];
185-
int err;
186-
187-
switch (family) {
188-
case AF_INET:
189-
err = uv_ip4_addr(*address, port, reinterpret_cast<sockaddr_in*>(&addr));
190-
break;
191-
case AF_INET6:
192-
err = uv_ip6_addr(*address, port, reinterpret_cast<sockaddr_in6*>(&addr));
193-
break;
194-
default:
195-
CHECK(0 && "unexpected address family");
196-
ABORT();
197-
}
198-
197+
struct sockaddr_storage addr_storage;
198+
int err = sockaddr_for_family(family, address.out(), port, &addr_storage);
199199
if (err == 0) {
200200
err = uv_udp_bind(&wrap->handle_,
201-
reinterpret_cast<const sockaddr*>(&addr),
201+
reinterpret_cast<const sockaddr*>(&addr_storage),
202202
flags);
203203
}
204204

@@ -369,27 +369,14 @@ void UDPWrap::DoSend(const FunctionCallbackInfo<Value>& args, int family) {
369369

370370
req_wrap->msg_size = msg_size;
371371

372-
char addr[sizeof(sockaddr_in6)];
373-
int err;
374-
375-
switch (family) {
376-
case AF_INET:
377-
err = uv_ip4_addr(*address, port, reinterpret_cast<sockaddr_in*>(&addr));
378-
break;
379-
case AF_INET6:
380-
err = uv_ip6_addr(*address, port, reinterpret_cast<sockaddr_in6*>(&addr));
381-
break;
382-
default:
383-
CHECK(0 && "unexpected address family");
384-
ABORT();
385-
}
386-
372+
struct sockaddr_storage addr_storage;
373+
int err = sockaddr_for_family(family, address.out(), port, &addr_storage);
387374
if (err == 0) {
388375
err = req_wrap->Dispatch(uv_udp_send,
389376
&wrap->handle_,
390377
*bufs,
391378
count,
392-
reinterpret_cast<const sockaddr*>(&addr),
379+
reinterpret_cast<const sockaddr*>(&addr_storage),
393380
OnSend);
394381
}
395382

0 commit comments

Comments
 (0)