46 lines
806 B
C
46 lines
806 B
C
|
|
#include <unistd.h>
|
|
#include <errno.h>
|
|
|
|
/* -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;
|
|
}
|
|
}
|