I\'m writing a module which exports an interface similar to send and recv.
Since those functions are supposed to return respectively the nu
Actually, you probably can do "proper" (as you put it) error management since you return an int.
Just use non-negative values for the number of bytes read or written and negative values for error codes. You don't have to limit yourself to -1:
enum myerrors {
ERR_NO_MEMORY = -1,
ERR_BAD_ARGS = -2,
ERR_CPU_EXPLODED = -3,
// and so on
};
However, setting errno in the fashion you want is valid. The standard states that errno expands to a modifiable lvalue, meaning you can set it. From C1x/n1425, 7.5 Errors :
... and
errnowhich expands to a modifiable lvalue that has type int, the value of which is set to a positive error number by several library functions.