@@ -674,9 +674,9 @@ where
674
674
( self . stream , self . socket )
675
675
}
676
676
677
- async fn write_request ( buf : & [ u8 ] , addr : AddrKind ) -> Result < Vec < u8 > > {
678
- let bytes_size = Self :: get_buf_size ( addr. size ( ) , buf . len ( ) ) ;
679
- let bytes = Vec :: with_capacity ( bytes_size ) ;
677
+ async fn write_request ( buf : & [ u8 ] , addr : AddrKind ) -> Result < ( Vec < u8 > , usize ) > {
678
+ let header_size = Self :: get_header_size ( addr. size ( ) ) ;
679
+ let bytes = Vec :: with_capacity ( header_size + buf . len ( ) ) ;
680
680
681
681
let mut cursor = Cursor :: new ( bytes) ;
682
682
cursor. write_reserved ( ) . await ?;
@@ -686,16 +686,16 @@ where
686
686
cursor. write_all ( buf) . await ?;
687
687
688
688
let bytes = cursor. into_inner ( ) ;
689
- Ok ( bytes)
689
+ Ok ( ( bytes, header_size ) )
690
690
}
691
691
692
692
pub async fn send_to < A > ( & self , buf : & [ u8 ] , addr : A ) -> Result < usize >
693
693
where
694
694
A : Into < AddrKind > ,
695
695
{
696
696
let addr: AddrKind = addr. into ( ) ;
697
- let bytes = Self :: write_request ( buf, addr) . await ?;
698
- Ok ( self . socket . send ( & bytes) . await ?)
697
+ let ( bytes, header_size ) = Self :: write_request ( buf, addr) . await ?;
698
+ Ok ( self . socket . send ( & bytes) . await ? - header_size )
699
699
}
700
700
701
701
async fn read_response (
@@ -723,10 +723,13 @@ where
723
723
}
724
724
725
725
fn get_buf_size ( addr_size : usize , buf_len : usize ) -> usize {
726
+ Self :: get_header_size ( addr_size) + buf_len
727
+ }
728
+ #[ inline]
729
+ fn get_header_size ( addr_size : usize ) -> usize {
726
730
2 // reserved
727
731
+ 1 // fragment id
728
732
+ addr_size
729
- + buf_len
730
733
}
731
734
}
732
735
0 commit comments