cccam.io
May 17, 2026

Why every cccam.io line runs on two parallel daemons

The single failure mode that kills most cardsharing services is the one we designed around first. Here's how — and the trade-offs we accepted to do it.

T
The cccam.io team
Engineering

If you’ve used cardsharing services for any length of time, you know the pattern: things work for weeks, then one evening — usually right when a match starts — every channel goes black. You check the status page. It’s green. You restart your receiver. Still black. You email support. They tell you to wait. Two hours later it’s back.

What happened is almost always the same: a single backend daemon crashed, hung, or got knocked offline by an upstream change. Everyone hosted on that box dropped at the same time. And because there’s only one box per line, there’s nothing to fail over to.

We didn’t want to ship that service. So we didn’t.

One account, two hosts

Every line on cccam.io is provisioned as two accounts with the same username and password — one on a MultiCS host running the CCcam protocol, one on an OScam host running the OScam protocol. You configure both on your receiver. The receiver tries them in order. If the first one can decode, it does. If it can’t, it falls back to the second.

This isn’t a load balancer. It isn’t DNS failover. It isn’t a “high-availability cluster” — those words usually mean a shared storage layer that fails in interesting ways at 3am. It’s just two completely independent daemons, on two completely independent boxes, running two different codebases, written by two different teams. Both authoritative. Both authorized.

The failure modes we care about are:

We didn’t invent this idea. Pair redundancy at the daemon level has been the standard answer in critical infrastructure for decades. It’s just unusual to see it applied to cardsharing, because most cardsharing services are run by one person on one box and adding a second daemon doubles the operational surface area.

Why both protocols

The next obvious question: if we’re doubling up, why not run two MultiCS hosts? Or two OScam hosts? Wouldn’t that be simpler?

It would. And we wouldn’t do it, because the failure modes we want to survive include protocol-level bugs. If your only defense against a CCcam parser bug is a second copy of the same CCcam parser, you don’t have a defense — you have two copies of the same broken thing.

Running one of each means:

The cost is that we maintain two configuration pipelines, two reload procedures, two health-check stacks, and two sets of metrics. Worth it.

The hard part: reloads

Doubling daemons is the easy half. The interesting half is keeping them in sync when a line changes — when a reseller creates a new account, when an abuse rule blocks an existing one, when a customer renews — without dropping the clients that are connected right now.

Both daemons read their accounts from a flat config file. Both have to be told the file changed. Both have to reload without disconnecting the people watching a stream.

For MultiCS, the file is Cccam.cfg. The naive approach is to rewrite it — unlink the old file, write a new one, signal the daemon. That’s wrong: it changes the file’s inode, and MultiCS’s internal file handle now points at a file that no longer exists. The reload silently fails. Clients drop.

What we do instead is an in-place edit: open the existing file, modify the bytes, close it. The inode stays the same. The daemon’s handle stays valid. The reload signal does what it’s supposed to.

For OScam, the file is oscam.user, and the reload story is different — OScam supports oscam -d 4096, a documented runtime signal that re-reads the user file without restarting the process. Clients stay connected through it. We use it.

These are not exotic tricks. They are documented in the daemons’ own manuals. They are also the kind of thing that a service which throws together a control panel and a bash script will get wrong, because the bash script will use > and mv and call it done.

What this costs you

Nothing extra. Every line includes both. You don’t pick a protocol at checkout. You don’t pay for the second account separately. There is no “premium tier” that adds redundancy — redundancy is the product.

What it does ask of you is that you configure both on your receiver. The setup guides under /docs walk through how to add a second CAM entry on Enigma2, OpenATV, OpenPLi, OScam-direct configs, MAG boxes, and the common DreamBox clones. It takes about a minute longer than configuring one. After that you stop thinking about it.

What this costs us

A lot more. Concretely:

We accepted those costs at the design stage because the alternative was a service that looks fine on a benchmark and then dies at the wrong moment. There are already plenty of those.

What you can verify

Talk is cheap. The things you can actually check yourself:

A line that decodes when both daemons are healthy is the easy case. A line that keeps decoding when one of them isn’t — that’s the case we built for.

If you want to try it without paying, the 48-hour trial is free, no card. You get the same two-daemon setup the paying customers have. If it works, you’ll know. If it doesn’t, we want to hear about it.