struct tstream_bsd {
int fd;
+ int error;
void *event_ptr;
struct tevent_fd *fde;
return -1;
}
+ if (bsds->error != 0) {
+ errno = bsds->error;
+ return -1;
+ }
+
ret = tsocket_bsd_pending(bsds->fd);
+ if (ret == -1) {
+ /*
+ * remember the error and don't
+ * allow further requests
+ */
+ bsds->error = errno;
+ }
return ret;
}
int _count;
bool ok, retry;
+ if (bsds->error != 0) {
+ tevent_req_error(req, bsds->error);
+ return;
+ }
+
ret = readv(bsds->fd, state->vector, state->count);
if (ret == 0) {
/* propagate end of file */
+ bsds->error = EPIPE;
tevent_req_error(req, EPIPE);
return;
}
/* retry later */
return;
}
+ if (err != 0) {
+ /*
+ * remember the error and don't
+ * allow further requests
+ */
+ bsds->error = err;
+ }
if (tevent_req_error(req, err)) {
return;
}
int _count;
bool ok, retry;
+ if (bsds->error != 0) {
+ tevent_req_error(req, bsds->error);
+ return;
+ }
+
ret = writev(bsds->fd, state->vector, state->count);
if (ret == 0) {
/* propagate end of file */
+ bsds->error = EPIPE;
tevent_req_error(req, EPIPE);
return;
}
/* retry later */
return;
}
+ if (err != 0) {
+ /*
+ * remember the error and don't
+ * allow further requests
+ */
+ bsds->error = err;
+ }
if (tevent_req_error(req, err)) {
return;
}