@@ -39,20 +39,16 @@ class TcpConnection(ABC):
3939 def __init__ (
4040 self ,
4141 tag : int ,
42- flush_bw_in_bps : int = 512 ,
43- recv_bw_in_bps : int = 512 ,
42+ flush_bps : int = 512 ,
43+ recv_bps : int = 512 ,
4444 ) -> None :
4545 self .tag : str = 'server' if tag == tcpConnectionTypes .SERVER else 'client'
4646 self .buffer : List [memoryview ] = []
4747 self .closed : bool = False
4848 self ._reusable : bool = False
4949 self ._num_buffer = 0
50- self ._flush_leakage = (
51- Leakage (rate = flush_bw_in_bps ) if flush_bw_in_bps > 0 else None
52- )
53- self ._recv_leakage = (
54- Leakage (rate = recv_bw_in_bps ) if recv_bw_in_bps > 0 else None
55- )
50+ self ._flush_leakage = Leakage (rate = flush_bps ) if flush_bps > 0 else None
51+ self ._recv_leakage = Leakage (rate = recv_bps ) if recv_bps > 0 else None
5652
5753 @property
5854 @abstractmethod
@@ -75,8 +71,9 @@ def recv(
7571 buffer_size = min (buffer_size , allowed_bytes )
7672 data : bytes = self .connection .recv (buffer_size )
7773 size = len (data )
78- if self ._recv_leakage is not None :
79- self ._recv_leakage .release (buffer_size - size )
74+ unused = buffer_size - size
75+ if self ._recv_leakage is not None and unused > 0 :
76+ self ._recv_leakage .release (unused )
8077 if size == 0 :
8178 return None
8279 logger .debug ('received %d bytes from %s' % (size , self .tag ))
@@ -103,8 +100,6 @@ def flush(self, max_send_size: Optional[int] = None) -> int:
103100 if not self .has_buffer ():
104101 return 0
105102 mv = self .buffer [0 ]
106- print (self .buffer )
107- print (mv .tobytes ())
108103 # TODO: Assemble multiple packets if total
109104 # size remains below max send size.
110105 max_send_size = max_send_size or DEFAULT_MAX_SEND_SIZE
@@ -117,22 +112,21 @@ def flush(self, max_send_size: Optional[int] = None) -> int:
117112 if allowed_bytes > 0 :
118113 try :
119114 sent = self .send (mv [:allowed_bytes ])
120- if self ._flush_leakage is not None :
121- self ._flush_leakage .release (allowed_bytes - sent )
122115 except BlockingIOError :
123116 logger .warning (
124117 'BlockingIOError when trying send to {0}' .format (self .tag ),
125118 )
126119 del mv
127120 return 0
128- # if sent == 0:
129- # return 0
121+ finally :
122+ unused = allowed_bytes - sent
123+ if self ._flush_leakage is not None and unused > 0 :
124+ self ._flush_leakage .release (unused )
130125 if sent == len (mv ):
131126 self .buffer .pop (0 )
132127 self ._num_buffer -= 1
133128 else :
134129 self .buffer [0 ] = mv [sent :]
135- # if sent > 0:
136130 logger .debug ('flushed %d bytes to %s' % (sent , self .tag ))
137131 logger .info (mv [:sent ].tobytes ())
138132 del mv
0 commit comments