Skip to content

Commit c3e1652

Browse files
committed
Correct the length of data that has been sent
1 parent a6f55c1 commit c3e1652

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/lib.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -674,9 +674,9 @@ where
674674
(self.stream, self.socket)
675675
}
676676

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());
680680

681681
let mut cursor = Cursor::new(bytes);
682682
cursor.write_reserved().await?;
@@ -686,16 +686,16 @@ where
686686
cursor.write_all(buf).await?;
687687

688688
let bytes = cursor.into_inner();
689-
Ok(bytes)
689+
Ok((bytes, header_size))
690690
}
691691

692692
pub async fn send_to<A>(&self, buf: &[u8], addr: A) -> Result<usize>
693693
where
694694
A: Into<AddrKind>,
695695
{
696696
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)
699699
}
700700

701701
async fn read_response(
@@ -723,10 +723,13 @@ where
723723
}
724724

725725
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 {
726730
2 // reserved
727731
+ 1 // fragment id
728732
+ addr_size
729-
+ buf_len
730733
}
731734
}
732735

0 commit comments

Comments
 (0)