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