How to build a daemon

Hello!

While building a little network daemon I stumbled upon the following
issue:

I have no idea how much data I can read without blocking. So an attacker
could simply ignore the protocol and stop the transfer so that my daemon
blocks forever…
How do you avoid this simple issue? The only method I found is setting a
Timeout::timeout 10 do end around the code, but this requires the
timeout module and I don’t know if this works reliable…

Could anybody please give me a hint? Thank you!

bye!
Dominik

Dominik Werder wrote:

Hello!

While building a little network daemon I stumbled upon the following issue:

I have no idea how much data I can read without blocking. So an attacker
could simply ignore the protocol and stop the transfer so that my daemon
blocks forever…
How do you avoid this simple issue? The only method I found is setting a
Timeout::timeout 10 do end around the code, but this requires the
timeout module and I don’t know if this works reliable…

You’d typically have a thread that handles a connection. So the worst
case is that a single thread blocks om IO but this does not block the
whole process. You’re only out of luck if Ruby is stuck in some long
running call into an external C lib (can be a system call or whatever)
because it doesn’t support native threads (yet).

Kind regards

robert