docs: async def _send_sack(self):
          """
          Build and send a selective acknowledgement (SACK) chunk.
          """
          gaps = []
          gap_next = None
          for tsn in sorted(self._sack_misordered):
              pos = (tsn - self._last_received_tsn) % SCTP_TSN_MODULO
              if tsn == gap_next:
                  gaps[-1][1] = pos
              else:
                  gaps.append([pos, pos])
              gap_next = tsn_plus_one(tsn)
  
          sack = SackChunk()
          sack.cumulative_tsn = self._last_received_tsn
          sack.advertised_rwnd = max(0, self._advertised_rwnd)
          sack.duplicates = self._sack_duplicates[:]
          sack.gaps = [tuple(x) for x in gaps]
  
          await self._send_chunk(sack)
  
          self._sack_duplicates.clear()
          self._sack_needed = False