@@ -475,14 +475,13 @@ impl<'a> TcpSocket<'a> {
475
475
pub fn send ( & mut self , size : usize ) -> Result < & mut [ u8 ] > {
476
476
if !self . may_send ( ) { return Err ( Error :: Illegal ) }
477
477
478
- #[ cfg( any( test, feature = "verbose" ) ) ]
479
- let old_length = self . tx_buffer . len ( ) ;
480
- let buffer = self . tx_buffer . enqueue_slice ( size) ;
478
+ let _old_length = self . tx_buffer . len ( ) ;
479
+ let buffer = self . tx_buffer . enqueue_many ( size) ;
481
480
if buffer. len ( ) > 0 {
482
481
#[ cfg( any( test, feature = "verbose" ) ) ]
483
482
net_trace ! ( "[{}]{}:{}: tx buffer: enqueueing {} octets (now {})" ,
484
483
self . debug_id, self . local_endpoint, self . remote_endpoint,
485
- buffer. len( ) , old_length + buffer. len( ) ) ;
484
+ buffer. len( ) , _old_length + buffer. len( ) ) ;
486
485
self . timer . reset ( ) ;
487
486
}
488
487
Ok ( buffer)
@@ -495,10 +494,18 @@ impl<'a> TcpSocket<'a> {
495
494
///
496
495
/// See also [send](#method.send).
497
496
pub fn send_slice ( & mut self , data : & [ u8 ] ) -> Result < usize > {
498
- let buffer = self . send ( data. len ( ) ) ?;
499
- let data = & data[ ..buffer. len ( ) ] ;
500
- buffer. copy_from_slice ( data) ;
501
- Ok ( buffer. len ( ) )
497
+ if !self . may_send ( ) { return Err ( Error :: Illegal ) }
498
+
499
+ let old_length = self . tx_buffer . len ( ) ;
500
+ let enqueued = self . tx_buffer . enqueue_slice ( data) ;
501
+ if enqueued != 0 {
502
+ #[ cfg( any( test, feature = "verbose" ) ) ]
503
+ net_trace ! ( "[{}]{}:{}: tx buffer: enqueueing {} octets (now {})" ,
504
+ self . debug_id, self . local_endpoint, self . remote_endpoint,
505
+ enqueued, old_length + enqueued) ;
506
+ self . timer . reset ( ) ;
507
+ }
508
+ Ok ( enqueued)
502
509
}
503
510
504
511
/// Dequeue a sequence of received octets, and return a pointer to it.
@@ -517,7 +524,7 @@ impl<'a> TcpSocket<'a> {
517
524
518
525
#[ cfg( any( test, feature = "verbose" ) ) ]
519
526
let old_length = self . rx_buffer . len ( ) ;
520
- let buffer = self . rx_buffer . dequeue_slice ( size) ;
527
+ let buffer = self . rx_buffer . dequeue_many ( size) ;
521
528
self . remote_seq_no += buffer. len ( ) ;
522
529
if buffer. len ( ) > 0 {
523
530
#[ cfg( any( test, feature = "verbose" ) ) ]
@@ -535,10 +542,19 @@ impl<'a> TcpSocket<'a> {
535
542
///
536
543
/// See also [recv](#method.recv).
537
544
pub fn recv_slice ( & mut self , data : & mut [ u8 ] ) -> Result < usize > {
538
- let buffer = self . recv ( data. len ( ) ) ?;
539
- let data = & mut data[ ..buffer. len ( ) ] ;
540
- data. copy_from_slice ( buffer) ;
541
- Ok ( buffer. len ( ) )
545
+ // See recv() above.
546
+ if !self . may_recv ( ) { return Err ( Error :: Illegal ) }
547
+
548
+ let old_length = self . rx_buffer . len ( ) ;
549
+ let dequeued = self . rx_buffer . dequeue_slice ( data) ;
550
+ self . remote_seq_no += dequeued;
551
+ if dequeued > 0 {
552
+ #[ cfg( any( test, feature = "verbose" ) ) ]
553
+ net_trace ! ( "[{}]{}:{}: rx buffer: dequeueing {} octets (now {})" ,
554
+ self . debug_id, self . local_endpoint, self . remote_endpoint,
555
+ dequeued, old_length - dequeued) ;
556
+ }
557
+ Ok ( dequeued)
542
558
}
543
559
544
560
/// Peek at a sequence of received octets without removing them from
@@ -972,7 +988,7 @@ impl<'a> TcpSocket<'a> {
972
988
net_trace ! ( "[{}]{}:{}: tx buffer: dequeueing {} octets (now {})" ,
973
989
self . debug_id, self . local_endpoint, self . remote_endpoint,
974
990
ack_len, self . tx_buffer. len( ) - ack_len) ;
975
- let acked = self . tx_buffer . dequeue_slice ( ack_len) ;
991
+ let acked = self . tx_buffer . dequeue_many ( ack_len) ;
976
992
debug_assert ! ( acked. len( ) == ack_len) ;
977
993
}
978
994
@@ -987,7 +1003,7 @@ impl<'a> TcpSocket<'a> {
987
1003
net_trace ! ( "[{}]{}:{}: rx buffer: enqueueing {} octets (now {})" ,
988
1004
self . debug_id, self . local_endpoint, self . remote_endpoint,
989
1005
repr. payload. len( ) , self . rx_buffer. len( ) + repr. payload. len( ) ) ;
990
- self . rx_buffer . enqueue_slice_all ( repr. payload ) ;
1006
+ self . rx_buffer . enqueue_slice ( repr. payload ) ;
991
1007
}
992
1008
993
1009
Ok ( None )
@@ -1750,7 +1766,7 @@ mod test {
1750
1766
window_len: 58 ,
1751
1767
..RECV_TEMPL
1752
1768
} ] ) ;
1753
- assert_eq ! ( s. rx_buffer. dequeue_slice ( 6 ) , & b"abcdef" [ ..] ) ;
1769
+ assert_eq ! ( s. rx_buffer. dequeue_many ( 6 ) , & b"abcdef" [ ..] ) ;
1754
1770
}
1755
1771
1756
1772
#[ test]
0 commit comments