delight/src/io/base_c.c

46 lines
806 B
C
Raw Normal View History

2010-08-05 12:42:59 +00:00
#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;
}
}