Skip to content

Commit b5ca5ad

Browse files
addaleaxaduh95
authored andcommitted
src: simplify TCPWrap::Connect signature
Just a little piece of cleanup -- this aligns `TCPWrap::Connect` with its sibling `TCPWrap::Bind`, deduplicates code and removes an unnecessary heap allocation. Signed-off-by: Anna Henningsen <anna@addaleax.net> PR-URL: #62929 Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent ca02af1 commit b5ca5ad

2 files changed

Lines changed: 23 additions & 27 deletions

File tree

src/tcp_wrap.cc

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,11 @@ void TCPWrap::Open(const FunctionCallbackInfo<Value>& args) {
372372
}
373373

374374
template <typename T>
375-
void TCPWrap::Bind(
376-
const FunctionCallbackInfo<Value>& args,
377-
int family,
378-
std::function<int(const char* ip_address, int port, T* addr)> uv_ip_addr) {
375+
void TCPWrap::Bind(const FunctionCallbackInfo<Value>& args,
376+
int family,
377+
int (*uv_ip_addr)(const char* ip_address,
378+
int port,
379+
T* addr)) {
379380
TCPWrap* wrap;
380381
ASSIGN_OR_RETURN_UNWRAP(
381382
&wrap, args.This(), args.GetReturnValue().Set(UV_EBADF));
@@ -424,29 +425,18 @@ void TCPWrap::Listen(const FunctionCallbackInfo<Value>& args) {
424425
}
425426

426427
void TCPWrap::Connect(const FunctionCallbackInfo<Value>& args) {
427-
CHECK(args[2]->IsUint32());
428-
// explicit cast to fit to libuv's type expectation
429-
int port = static_cast<int>(args[2].As<Uint32>()->Value());
430-
Connect<sockaddr_in>(args, [port](const char* ip_address, sockaddr_in* addr) {
431-
return uv_ip4_addr(ip_address, port, addr);
432-
});
428+
Connect<sockaddr_in>(args, uv_ip4_addr);
433429
}
434430

435431
void TCPWrap::Connect6(const FunctionCallbackInfo<Value>& args) {
436-
Environment* env = Environment::GetCurrent(args);
437-
CHECK(args[2]->IsUint32());
438-
int port;
439-
if (!args[2]->Int32Value(env->context()).To(&port)) return;
440-
Connect<sockaddr_in6>(args,
441-
[port](const char* ip_address, sockaddr_in6* addr) {
442-
return uv_ip6_addr(ip_address, port, addr);
443-
});
432+
Connect<sockaddr_in6>(args, uv_ip6_addr);
444433
}
445434

446435
template <typename T>
447-
void TCPWrap::Connect(
448-
const FunctionCallbackInfo<Value>& args,
449-
std::function<int(const char* ip_address, T* addr)> uv_ip_addr) {
436+
void TCPWrap::Connect(const FunctionCallbackInfo<Value>& args,
437+
int (*uv_ip_addr)(const char* ip_address,
438+
int port,
439+
T* addr)) {
450440
Environment* env = Environment::GetCurrent(args);
451441

452442
TCPWrap* wrap;
@@ -456,11 +446,14 @@ void TCPWrap::Connect(
456446
CHECK(args[0]->IsObject());
457447
CHECK(args[1]->IsString());
458448

449+
int port;
450+
if (!args[2]->Int32Value(env->context()).To(&port)) return;
451+
459452
Local<Object> req_wrap_obj = args[0].As<Object>();
460453
node::Utf8Value ip_address(env->isolate(), args[1]);
461454

462455
T addr;
463-
int err = uv_ip_addr(*ip_address, &addr);
456+
int err = uv_ip_addr(*ip_address, port, &addr);
464457

465458
if (err == 0) {
466459
AsyncHooks::DefaultTriggerAsyncIdScope trigger_scope(wrap);

src/tcp_wrap.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,16 @@ class TCPWrap : public ConnectionWrap<TCPWrap, uv_tcp_t> {
8383
static void Connect6(const v8::FunctionCallbackInfo<v8::Value>& args);
8484
template <typename T>
8585
static void Connect(const v8::FunctionCallbackInfo<v8::Value>& args,
86-
std::function<int(const char* ip_address, T* addr)> uv_ip_addr);
86+
int (*uv_ip_addr)(const char* ip_address,
87+
int port,
88+
T* addr));
8789
static void Open(const v8::FunctionCallbackInfo<v8::Value>& args);
8890
template <typename T>
89-
static void Bind(
90-
const v8::FunctionCallbackInfo<v8::Value>& args,
91-
int family,
92-
std::function<int(const char* ip_address, int port, T* addr)> uv_ip_addr);
91+
static void Bind(const v8::FunctionCallbackInfo<v8::Value>& args,
92+
int family,
93+
int (*uv_ip_addr)(const char* ip_address,
94+
int port,
95+
T* addr));
9396
static void Reset(const v8::FunctionCallbackInfo<v8::Value>& args);
9497
int Reset(v8::Local<v8::Value> close_callback = v8::Local<v8::Value>());
9598

0 commit comments

Comments
 (0)