send method
Sends data to the peer via the multiplexer. Enforces anti-amplification limits per RFC 9000 Section 8.1.
Implementation
void send(Uint8List data) {
if (_closing) throw StateError('Socket is closing');
// Anti-amplification check: don't send more than 3x what we've received
// until the address is validated
if (!_addressValidated) {
final limit = _bytesReceivedBeforeValidation * amplificationFactor;
if (_bytesSentBeforeValidation + data.length > limit) {
// Queue the packet until address is validated
_pendingPackets.add(data);
return;
}
_bytesSentBeforeValidation += data.length;
}
if (UdxLogging.info) {
UdxLogging.infoLog('[DIAG-UDX-SEND] ${data.length}B to=${remoteAddress.address}:$remotePort');
}
try {
multiplexer.send(data, remoteAddress, remotePort);
} on SocketException catch (e) {
emit('error', {'error': e, 'message': 'Send failed: ${e.message}'});
close();
rethrow;
}
}