rustdesk/rustdesk · error
Key overuse
Error message
Key overuse
What it means
The rendezvous server returned Failure::LICENSE_OVERUSE in the PunchHoleResponse: the pro server's licensed connection/device limit has been reached, so new punch-hole requests are refused. The client bails with 'Key overuse'.
Source
Thrown at src/client.rs:958
};
match msg_in.union {
Some(rendezvous_message::Union::PunchHoleResponse(ph)) => {
if ph.socket_addr.is_empty() {
if !ph.other_failure.is_empty() {
bail!(ph.other_failure);
}
match ph.failure.enum_value() {
Ok(punch_hole_response::Failure::ID_NOT_EXIST) => {
bail!("ID does not exist");
}
Ok(punch_hole_response::Failure::OFFLINE) => {
bail!("Remote desktop is offline");
}
Ok(punch_hole_response::Failure::LICENSE_MISMATCH) => {
bail!("Key mismatch");
}
Ok(punch_hole_response::Failure::LICENSE_OVERUSE) => {
bail!("Key overuse");
}
_ => bail!("other punch hole failure"),
}
} else {
peer_nat_type = ph.nat_type();
is_local = ph.is_local();
signed_id_pk = ph.pk.into();
relay_server = ph.relay_server;
peer_addr = AddrMangle::decode(&ph.socket_addr);
feedback = ph.feedback;
webrtc_sdp_answer = ph.webrtc_sdp_answer;
let s = udp.0.take();
if udp_nat_port > 0 && ph.is_udp && s.is_some() {
if let Some(s) = s {
allow_err!(s.connect(peer_addr).await);
udp.0 = Some(s);
}
}View on GitHub (pinned to 91c9fccbb0)
Solutions
- Upgrade or extend the server license to cover current usage
- Remove inactive/decommissioned devices from the server's licensed device list
- Stagger or reduce concurrent connections, then retry
Defensive patterns
Strategy: retry
Validate before calling
// Check current licensed device/connection count against the license quota via the server admin console before connecting
Try / catch
match connect() {
Err(e) if e.to_string() == "Key overuse" => {
alert_admin("License quota exceeded; upgrade or free devices");
retry_after_quota_frees();
}
r => handle(r),
} Prevention
- Provision a license headroom above peak concurrent usage
- Clean up decommissioned devices from the licensed device list
- Alert on license utilization trends before hitting the cap
When it happens
Trigger: PunchHoleResponse with empty socket_addr and ph.failure == LICENSE_OVERUSE, raised when concurrent devices/connections exceed the server license quota.
Common situations: Self-hosted pro deployment exceeding its licensed device count; stale device entries consuming license seats after fleet changes; demo/free license used in production load.
Related errors
AI-assisted analysis of rustdesk/rustdesk@91c9fccbb0 (2026-09-10).
Data as JSON: /api/errors/20daa7ba9d04b43d.
Report an issue: GitHub.