[fpc-pascal] Translating from error numbers to symbolic name
Marco van de Voort
marcov at stack.nl
Sat Aug 4 00:24:41 CEST 2012
In our previous episode, Mark Morgan Lloyd said:
> When using a function like fpAccept on a non-blocking socket, in some
> cases -1 is returned with a documented (Linux kernel) error code of
> EAGAIN. Should I be looking for this in errno or SocketError?
Socketerror is more portable, but on *nix errno will work too.
> When I've retrieved a numeric code from errno or SocketError, is there a
> way of converting it to a concise literal such as 'EAGAIN'?
See errors unit.
> I want the
> log to report that accept() has failed with EAGAIN, rather than having
> explanatory text that doesn't match the kernel documentation.
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.
More information about the fpc-pascal
mailing list