#include #include /* -1: not now (try later), -2: con closed, -3: unexpected error */ int iobase_write(int fd, const void* buf, int len) { int res = write(fd, buf, len); if (res >= 0) return res; switch (errno) { case EAGAIN: #if EAGAIN != EWOULDBLOCK case EWOULDBLOCK: #endif case EINTR: return -1; break; case ECONNRESET: case EPIPE: case ETIMEDOUT: return -2; default: return -3; } } /* 0: eof, -1: not now (try later), -2: con closed, -3: unexpected error */ int iobase_read(int fd, void* buf, int len) { int res = read(fd, buf, len); if (res >= 0) return res; switch (errno) { case EAGAIN: #if EAGAIN != EWOULDBLOCK case EWOULDBLOCK: #endif case EINTR: return -1; break; case ECONNRESET: case ETIMEDOUT: return -2; default: return -3; } }