stop xread/xwrite when no ret is zero - conn closed
Signed-off-by: AGentooCat <agentoocat@mail.i2p>
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user