commit - 51ea137bb49c36da2a1bbe887f47cb8614fbe436
commit + ce0234337a4093b79ae71ea572440f6a2c8af157
blob - c9ff26b0bea6eff0223c407fe289e9344d2f8695
blob + b4f8f9cf1648947784cae99295879d0682cec0e7
--- bufio.c
+++ bufio.c
#include <unistd.h>
#include "bufio.h"
-#include "ev.h" /* for EV_* flags */
int
buf_init(struct buf *buf)
case 0:
return 0;
case TLS_WANT_POLLIN:
+ errno = EAGAIN;
+ bio->pflags = BUFIO_WANT_READ;
+ return (-1);
case TLS_WANT_POLLOUT:
errno = EAGAIN;
- bio->pflags = EV_READ | EV_WRITE;
- /* fallthrough */
+ bio->pflags = BUFIO_WANT_WRITE;
+ return (-1);
default:
return (-1);
}
if (bio->pflags)
return (bio->pflags);
- ev = EV_READ;
+ ev = BUFIO_WANT_READ;
if (bio->wbuf.len != 0)
- ev |= EV_WRITE;
+ ev |= BUFIO_WANT_WRITE;
return (ev);
}
case 0:
return (0);
case TLS_WANT_POLLIN:
+ errno = EAGAIN;
+ bio->pflags = BUFIO_WANT_READ;
+ return (-1);
case TLS_WANT_POLLOUT:
errno = EAGAIN;
- bio->pflags = EV_READ | EV_WRITE;
- /* fallthrough */
+ bio->pflags = BUFIO_WANT_WRITE;
+ return (-1);
default:
return (-1);
}
rbuf->cap - rbuf->len);
switch (r) {
case TLS_WANT_POLLIN:
+ errno = EAGAIN;
+ bio->pflags = BUFIO_WANT_READ;
+ return (-1);
case TLS_WANT_POLLOUT:
- bio->pflags = EV_READ | EV_WRITE;
errno = EAGAIN;
+ bio->pflags = BUFIO_WANT_WRITE;
return (-1);
case -1:
return (-1);
if (bio->ctx) {
switch (w = tls_write(bio->ctx, wbuf->buf, wbuf->len)) {
case TLS_WANT_POLLIN:
+ errno = EAGAIN;
+ bio->pflags = BUFIO_WANT_READ;
+ return (-1);
case TLS_WANT_POLLOUT:
- bio->pflags = EV_WRITE | EV_READ;
errno = EAGAIN;
+ bio->pflags = BUFIO_WANT_WRITE;
return (-1);
case -1:
return (-1);
blob - b079dbe02b0175351fe48d69b61a19779edf4433
blob + ed6c460e96d4f70b3c4f0a72e086a041b1fca944
--- bufio.h
+++ bufio.h
struct buf rbuf;
};
+#define BUFIO_WANT_READ 0x1
+#define BUFIO_WANT_WRITE 0x2
+
int buf_init(struct buf *);
int buf_has_line(struct buf *, const char *);
void buf_drain(struct buf *, size_t);
blob - 7383557038bcb3a3fcbfd7214d7ec9e4e05cdeda
blob + 81e077ed13af53209880ae47d3dd5003391d3eed
--- net.c
+++ net.c
abort(); /* TODO */
}
+static inline int
+req_bio_ev(struct req *req)
+{
+ int ret, ev;
+
+ ret = 0;
+ ev = bufio_ev(&req->bio);
+ if (ev & BUFIO_WANT_READ)
+ ret |= EV_READ;
+ if (ev & BUFIO_WANT_WRITE)
+ ret |= EV_WRITE;
+ return (ret);
+}
+
static void
close_conn(int fd, int ev, void *d)
{
req->fd != -1 &&
bufio_close(&req->bio) == -1 &&
errno == EAGAIN) {
- ev_add(req->fd, bufio_ev(&req->bio), close_conn, req);
+ ev_add(req->fd, req_bio_ev(req), close_conn, req);
return;
}
if (req->state == CONN_HANDSHAKE) {
if (bufio_handshake(&req->bio) == -1 && errno == EAGAIN) {
- ev_add(req->fd, bufio_ev(&req->bio),
- net_ev, req);
+ ev_add(req->fd, req_bio_ev(req), net_ev, req);
return;
}
return;
}
if (endl == NULL) {
- ev_add(req->fd, bufio_ev(&req->bio), net_ev, req);
+ ev_add(req->fd, req_bio_ev(req), net_ev, req);
return;
}
*endl = '\0';
return;
}
- ev_add(req->fd, bufio_ev(&req->bio), net_ev, req);
+ ev_add(req->fd, req_bio_ev(req), net_ev, req);
}
static int