11use std:: {
22 collections:: HashMap ,
3- io, mem,
43 net:: SocketAddr ,
54 pin:: Pin ,
65 sync:: {
@@ -29,7 +28,7 @@ use tokio::{
2928} ;
3029use tracing:: { error, trace} ;
3130
32- use super :: {
31+ use crate :: {
3332 device:: VirtualDevice ,
3433 packet:: { AnyIpPktFrame , IpPacket } ,
3534 Runner ,
@@ -116,17 +115,12 @@ impl TcpListenerRunner {
116115
117116 let src_ip = packet. src_addr ( ) ;
118117 let dst_ip = packet. dst_addr ( ) ;
118+ let payload = packet. payload ( ) ;
119119
120- let packet = match TcpPacket :: new_checked ( packet . payload ( ) ) {
120+ let packet = match TcpPacket :: new_checked ( payload) {
121121 Ok ( p) => p,
122122 Err ( err) => {
123- error ! (
124- "invalid TCP err: {}, src_ip: {}, dst_ip: {}, payload: {:?}" ,
125- err,
126- packet. src_addr( ) ,
127- packet. dst_addr( ) ,
128- packet. payload( ) ,
129- ) ;
123+ error ! ( "invalid TCP err: {err}, src_ip: {src_ip}, dst_ip: {dst_ip}, payload: {payload:?}" ) ;
130124 continue ;
131125 }
132126 } ;
@@ -253,9 +247,7 @@ impl TcpListenerRunner {
253247 } ) ;
254248
255249 match result {
256- Ok ( ..) => {
257- wake_receiver = true ;
258- }
250+ Ok ( ..) => wake_receiver = true ,
259251 Err ( err) => {
260252 error ! ( "socket recv error: {:?}, {:?}" , err, socket. state( ) ) ;
261253
@@ -275,16 +267,16 @@ impl TcpListenerRunner {
275267
276268 // If socket is not in ESTABLISH, FIN-WAIT-1, FIN-WAIT-2,
277269 // the local client have closed our receiver.
270+ let states = [
271+ TcpState :: Listen ,
272+ TcpState :: SynReceived ,
273+ TcpState :: Established ,
274+ TcpState :: FinWait1 ,
275+ TcpState :: FinWait2 ,
276+ ] ;
278277 if matches ! ( control. recv_state, TcpSocketState :: Normal )
279278 && !socket. may_recv ( )
280- && !matches ! (
281- socket. state( ) ,
282- TcpState :: Listen
283- | TcpState :: SynReceived
284- | TcpState :: Established
285- | TcpState :: FinWait1
286- | TcpState :: FinWait2
287- )
279+ && !states. contains ( & socket. state ( ) )
288280 {
289281 trace ! ( "closed TCP Read Half, {:?}" , socket. state( ) ) ;
290282
@@ -308,9 +300,7 @@ impl TcpListenerRunner {
308300 } ) ;
309301
310302 match result {
311- Ok ( ..) => {
312- wake_sender = true ;
313- }
303+ Ok ( ..) => wake_sender = true ,
314304 Err ( err) => {
315305 error ! ( "socket send error: {:?}, {:?}" , err, socket. state( ) ) ;
316306
@@ -466,7 +456,7 @@ impl AsyncRead for TcpStream {
466456 self : Pin < & mut Self > ,
467457 cx : & mut Context < ' _ > ,
468458 buf : & mut ReadBuf < ' _ > ,
469- ) -> Poll < io:: Result < ( ) > > {
459+ ) -> Poll < std :: io:: Result < ( ) > > {
470460 let mut control = self . control . lock ( ) ;
471461
472462 // Read from buffer
@@ -486,7 +476,9 @@ impl AsyncRead for TcpStream {
486476 return Poll :: Pending ;
487477 }
488478
489- let recv_buf = unsafe { mem:: transmute :: < _ , & mut [ u8 ] > ( buf. unfilled_mut ( ) ) } ;
479+ let recv_buf = unsafe {
480+ std:: mem:: transmute :: < & mut [ std:: mem:: MaybeUninit < u8 > ] , & mut [ u8 ] > ( buf. unfilled_mut ( ) )
481+ } ;
490482 let n = control. recv_buffer . dequeue_slice ( recv_buf) ;
491483 buf. advance ( n) ;
492484
@@ -503,12 +495,12 @@ impl AsyncWrite for TcpStream {
503495 self : Pin < & mut Self > ,
504496 cx : & mut Context < ' _ > ,
505497 buf : & [ u8 ] ,
506- ) -> Poll < io:: Result < usize > > {
498+ ) -> Poll < std :: io:: Result < usize > > {
507499 let mut control = self . control . lock ( ) ;
508500
509501 // If state == Close | Closing | Closed, the TCP stream WR half is closed.
510502 if !matches ! ( control. send_state, TcpSocketState :: Normal ) {
511- return Err ( io:: ErrorKind :: BrokenPipe . into ( ) ) . into ( ) ;
503+ return Err ( std :: io:: ErrorKind :: BrokenPipe . into ( ) ) . into ( ) ;
512504 }
513505
514506 // Write to buffer
@@ -532,11 +524,11 @@ impl AsyncWrite for TcpStream {
532524 Ok ( n) . into ( )
533525 }
534526
535- fn poll_flush ( self : Pin < & mut Self > , _cx : & mut Context < ' _ > ) -> Poll < io:: Result < ( ) > > {
527+ fn poll_flush ( self : Pin < & mut Self > , _cx : & mut Context < ' _ > ) -> Poll < std :: io:: Result < ( ) > > {
536528 Ok ( ( ) ) . into ( )
537529 }
538530
539- fn poll_shutdown ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < io:: Result < ( ) > > {
531+ fn poll_shutdown ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < std :: io:: Result < ( ) > > {
540532 let mut control = self . control . lock ( ) ;
541533
542534 if matches ! ( control. send_state, TcpSocketState :: Closed ) {
0 commit comments