@@ -4,8 +4,8 @@ use std::os::raw::c_int;
4
4
5
5
use crate :: socket:: { self , get_loop, sockaddr_from_string, Emitter , HandleData , UvRefence } ;
6
6
use crate :: util:: {
7
- addr_to_string, buf_into_vec, error, get_err, resolve_libc_err, resolve_uv_err,
8
- set_clo_exec , set_non_block, socket_addr_to_string, uv_err_msg,
7
+ addr_to_string, buf_into_vec, error, get_err, resolve_libc_err, resolve_uv_err, set_clo_exec ,
8
+ set_non_block, socket_addr_to_string, uv_err_msg,
9
9
} ;
10
10
use libc:: { sockaddr, sockaddr_un, EAGAIN , EINTR , EINVAL , ENOBUFS , EWOULDBLOCK } ;
11
11
use napi:: { Env , JsBuffer , JsFunction , JsNumber , JsObject , JsString , JsUnknown , Ref , Result } ;
@@ -120,6 +120,11 @@ impl SeqpacketSocketWrap {
120
120
Ok ( ( ) )
121
121
}
122
122
123
+ #[ napi]
124
+ pub fn state ( & self ) -> i32 {
125
+ self . state as i32
126
+ }
127
+
123
128
#[ napi]
124
129
pub fn close ( & mut self ) -> Result < ( ) > {
125
130
if self . state == State :: Closed {
@@ -534,15 +539,13 @@ impl SeqpacketSocketWrap {
534
539
535
540
let err = errno ( ) ;
536
541
537
- if ret == -1 && err != 0 {
538
- if err == libc:: EINPROGRESS {
539
- // not an error
540
- } else if err == libc:: ECONNRESET || err == EINVAL {
542
+ // libc::EINPROGRESS is not an error
543
+ if ret == -1 && err != 0 && err != libc:: EINPROGRESS {
544
+ if err == libc:: ECONNRESET || err == EINVAL {
541
545
// TODO should we delay error?
542
- resolve_libc_err ( ret) ?;
543
- } else {
544
- resolve_libc_err ( ret) ?;
545
546
}
547
+ self . close ( ) ?;
548
+ resolve_libc_err ( ret) ?;
546
549
}
547
550
548
551
unsafe {
@@ -600,11 +603,13 @@ impl SeqpacketSocketWrap {
600
603
}
601
604
602
605
extern "C" fn on_close ( handle : * mut sys:: uv_handle_t ) {
603
- unsafe { assert ! ( !( * handle) . data. is_null( ) , "unexpected null handle data" ) ; } ;
606
+ unsafe {
607
+ assert ! ( !( * handle) . data. is_null( ) , "unexpected null handle data" ) ;
608
+ } ;
604
609
unsafe {
605
610
let mut data = Box :: from_raw ( ( * handle) . data as * mut HandleData ) ;
606
611
data. unref ( ) . unwrap ( ) ;
607
- Box :: from_raw ( handle) ;
612
+ let _ = Box :: from_raw ( handle) ;
608
613
} ;
609
614
}
610
615
@@ -615,7 +620,9 @@ macro_rules! on_event {
615
620
return ;
616
621
}
617
622
618
- unsafe { assert!( !( * handle) . data. is_null( ) , "unexpected null handle data" ) ; } ;
623
+ unsafe {
624
+ assert!( !( * handle) . data. is_null( ) , "unexpected null handle data" ) ;
625
+ } ;
619
626
let data = unsafe { Box :: from_raw( ( * handle) . data as * mut HandleData ) } ;
620
627
let wrap = data. inner_mut_ref:: <& mut SeqpacketSocketWrap >( ) . unwrap( ) ;
621
628
wrap. $fn( status, events) ;
0 commit comments