summaryrefslogtreecommitdiff
path: root/src/IO/IO.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/IO/IO.c')
-rw-r--r--src/IO/IO.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/IO/IO.c b/src/IO/IO.c
index 4312fddb..3a2c0332 100644
--- a/src/IO/IO.c
+++ b/src/IO/IO.c
@@ -37,7 +37,7 @@ typedef struct {
int Op; /* IORead | IOWrite */
int FD; /* Current File Descriptor */
int Flags; /* Flag array (look definitions above) */
- int Status; /* errno code */
+ int Status; /* nonzero upon IO failure */
Dstr *Buf; /* Internal buffer */
void *Info; /* CCC Info structure for this IO */
@@ -184,9 +184,14 @@ static bool_t IO_read(IOData_t *io)
ret = TRUE;
break;
} else {
- io->Status = errno;
- MSG("READ Failed: %s\n", strerror(errno));
- break;
+ if (conn) {
+ io->Status = St;
+ break;
+ } else {
+ io->Status = errno;
+ MSG("READ Failed with %d: %s\n", St, strerror(errno));
+ break;
+ }
}
} else { /* St == 0 */
break;
@@ -234,8 +239,14 @@ static bool_t IO_write(IOData_t *io)
ret = TRUE;
break;
} else {
- io->Status = errno;
- break;
+ if (conn) {
+ io->Status = St;
+ break;
+ } else {
+ io->Status = errno;
+ MSG("WRITE Failed with %d: %s\n", St, strerror(errno));
+ break;
+ }
}
} else if (St < io->Buf->len) {
/* Not all data written */