waldo kitty wrote:
On 8/3/2012 18:24, Marco van de Voort wrote:

EAGAIN generally means that you should try again. So repeat until

   repeat
     res:=dofunc;
     err:=geterrno;
   until (res<>-1) or ((err<>ESysEINTR) and (err<>ESysEAgain));

it is a workaround against potential deadlock between userland and kernel
iirc. Retrying means it can simple work.

should there be some sort of retry count or timing period in which to decide to give up so that one doesn't retry forever? if yes, how might that be accomplished? ;)

admittedly, i may have missed something in the ESysEINTR and ESysAgain portion since i'm a new babe with regards to signaling like that... but i just had to ask, ya know? ;)

In my case I've set the sockets non-blocking and am polling non-destructively until a complete request has arrived (I'm writing a custom finger daemon, so expect \r\n). After a minute the socket gets moved to a different list to be tarpitted, or if that can't be done to be held open for a few minutes to discourage casual hackers. Detail debugging continues, but I'm trying to be very aggressive against abusers since it will be giving out temporary passwords for database connection.

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to