Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Timing-out network clients?

by erroneousBollock (Curate)
on Dec 03, 2007 at 02:12 UTC ( #654494=note: print w/ replies, xml ) Need Help??


in reply to Timing-out network clients?

IO::Socket::INET's timeout method (or the Timeout hash-param to the constructor) won't do what you want here. That timeout value corresponds to how long the socket should wait for acknowledgment from the peer when it has sent data (or is trying to connect).

You definitely do need some sort of "global timer". You're forking, so it's probably as simple as:

  1. recording the PID of the child in a hash, along with the start time
  2. noting when the child process should no longer be around,
  3. sending the KILL signal to the child process.
To set up the timer, you'll either need to use alarm, or switch to a non-blocking form of $server->accept.
I recommend putting the listening socket into an IO::Select object, then adding calls to Timer::HiRes::usleep in your while loop.

-David


Comment on Re: Timing-out network clients?
Download Code
Re^2: Timing-out network clients?
by pascaldee (Acolyte) on Dec 05, 2007 at 07:12 UTC
    Thanks for the suggestion. I prefer not simply limiting the maximum age for a child, since children need different time according to their connection speed and amount of data to send. I want to set timeout for every read from the client. So I guess I'll try to look at a select()-based approach.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://654494]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2014-09-01 21:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (17 votes), past polls