@@ -97,6 +97,7 @@ void TCPWrap::Initialize(Local<Object> target,
9797 GetSockOrPeerName<TCPWrap, uv_tcp_getpeername>);
9898 env->SetProtoMethod (t, " setNoDelay" , SetNoDelay);
9999 env->SetProtoMethod (t, " setKeepAlive" , SetKeepAlive);
100+ env->SetProtoMethod (t, " reset" , Reset);
100101
101102#ifdef _WIN32
102103 env->SetProtoMethod (t, " setSimultaneousAccepts" , SetSimultaneousAccepts);
@@ -134,6 +135,7 @@ void TCPWrap::RegisterExternalReferences(ExternalReferenceRegistry* registry) {
134135 registry->Register (GetSockOrPeerName<TCPWrap, uv_tcp_getpeername>);
135136 registry->Register (SetNoDelay);
136137 registry->Register (SetKeepAlive);
138+ registry->Register (Reset);
137139#ifdef _WIN32
138140 registry->Register (SetSimultaneousAccepts);
139141#endif
@@ -339,7 +341,29 @@ void TCPWrap::Connect(const FunctionCallbackInfo<Value>& args,
339341
340342 args.GetReturnValue ().Set (err);
341343}
344+ void TCPWrap::Reset (const FunctionCallbackInfo<Value>& args) {
345+ TCPWrap* wrap;
346+ ASSIGN_OR_RETURN_UNWRAP (
347+ &wrap, args.Holder (), args.GetReturnValue ().Set (UV_EBADF));
348+
349+ int err = wrap->Reset (args[0 ]);
350+
351+ args.GetReturnValue ().Set (err);
352+ }
353+
354+ int TCPWrap::Reset (Local<Value> close_callback) {
355+ if (state_ != kInitialized ) return 0 ;
342356
357+ int err = uv_tcp_close_reset (&handle_, OnClose);
358+ state_ = kClosing ;
359+ if (!err & !close_callback.IsEmpty () && close_callback->IsFunction () &&
360+ !persistent ().IsEmpty ()) {
361+ object ()
362+ ->Set (env ()->context (), env ()->handle_onclose_symbol (), close_callback)
363+ .Check ();
364+ }
365+ return err;
366+ }
343367
344368// also used by udp_wrap.cc
345369MaybeLocal<Object> AddressToJS (Environment* env,
0 commit comments