stop xread/xwrite when no ret is zero - conn closed

Signed-off-by: AGentooCat <agentoocat@mail.i2p>
This commit is contained in:
2025-06-12 07:57:26 +00:00
parent 50f54a0a62
commit c169a03ba1

View File

@ -38,13 +38,14 @@ void strip_crlf(const char *text) {
#define XIO(name, func, ...) ssize_t name(__VA_ARGS__) { \
ssize_t ret = 0; \
size_t rem = len; \
size_t rem = len, done = 0; \
while (rem > 0) { \
ret = func(fd, &line[len - rem], rem); \
if (ret == 0) break; \
if (ret < 0 && errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) return ret; \
if (ret > 0) rem -= ret; \
if (ret > 0) { rem -= ret; done += ret; } \
} \
return len; \
return done; \
}
XIO(xread, read, int fd, void *line, size_t len);
XIO(xwrite, write, int fd, const char *line, size_t len);