UDPSocket constructor
UDPSocket({
- required UDX udx,
- required UDXMultiplexer multiplexer,
- required InternetAddress remoteAddress,
- required int remotePort,
- required ConnectionCids cids,
- UdxMetricsObserver? metricsObserver,
- bool isServer = false,
Creates a new UDX connection socket.
Implementation
UDPSocket({
required this.udx,
required this.multiplexer,
required this.remoteAddress,
required this.remotePort,
required this.cids,
this.metricsObserver,
bool isServer = false,
}) {
_localConnectionMaxData = defaultInitialConnectionWindow;
_remoteConnectionMaxData = defaultInitialConnectionWindow;
_localMaxStreams = defaultMaxStreams;
_pmtudController = PathMtuDiscoveryController();
// Initialize connection-level packet management
_packetManager = PacketManager();
_congestionController = CongestionController(packetManager: _packetManager);
_packetManager.congestionController = _congestionController;
// Set up retransmission callback
_packetManager.onRetransmit = (packet) {
if (!_closing) {
try {
send(packet.toBytes());
} catch (e) {
// Ignore send errors during retransmission
}
}
};
_packetManager.onSendProbe = (packet) {
if (!_closing) {
try {
send(packet.toBytes());
} catch (e) {
// Ignore send errors for probes
}
}
};
_congestionController.onProbe = () {
_packetManager.sendProbe(cids.remoteCid, cids.localCid, 0, 0);
};
_congestionController.onFastRetransmit = (sequence) {
_packetManager.retransmitPacket(sequence);
};
// For client-initiated connections, address is validated by default
// For server-side connections (receiving SYN), address must be validated
_addressValidated = !isServer;
// Notify observer that handshake is starting
_handshakeStartTime = DateTime.now();
metricsObserver?.onHandshakeStart(
cids.localCid,
cids.remoteCid,
'${remoteAddress.address}:$remotePort',
);
}