Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def maybe_send(self):
- """
- Segmentizes and calls tx() on data available in tx_data
- """
- if not self.tx_data:
- return
- # segmentize self.tx_data
- snd = self.snd
- total_sendable_bytes = snd.wnd |MINUS| (snd.nxt |MINUS| snd.una)
- bytes_sent = 0
- remaining = len(self.tx_data)
- while bytes_sent |LT| total_sendable_bytes and remaining |GT| 0:
- # Compute the size of the current segment
- seg_size = self.mss
- curr_sendable_bytes = total_sendable_bytes |MINUS| bytes_sent
- if seg_size |GT| curr_sendable_bytes:
- seg_size = curr_sendable_bytes
- if seg_size |GT| remaining:
- seg_size = remaining
- # Transmit the packet
- seg = self.tx_data[:seg_size]
- packet = self.new_packet(ack=False, data=seg)
- self.tx(packet)
- # Modify bytes sent so far and remaining bytes to send
- bytes_sent = bytes_sent | PLUS | seg_size
- remaining = remaining | MINUS | seg_size
- # Remove transmitted data from buffer
- self.tx_data = self.tx_data[seg_size:]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement