Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/lib/libsts_evloop/sts_ev.c b/lib/libsts_evloop/sts_ev.c
- index 173e4fe..de45e7e 100644
- --- a/lib/libsts_evloop/sts_ev.c
- +++ b/lib/libsts_evloop/sts_ev.c
- @@ -206,31 +206,30 @@ send_cb(EV_P, ev_io *w, int revents)
- p[0] = w->fd;
- p[1] = MSG_NOSIGNAL;
- - while ((buf = sts_fifo_last(conn->buf_txq)) != NULL) {
- - written = sts_ring_buffer_send(buf, send_buffer, p, NULL);
- + if ((buf = sts_fifo_get(conn->buf_txq)) == NULL) {
- + /* No data to send */
- + ev_io_stop(loop, w);
- - if (written == -1) {
- - if (IO_IS_BLOCKED())
- - break;
- + /* return if read watcher is on, otherwise ... */
- + if (! ev_is_active(&conn->rd))
- + goto shut_conn;
- + } else {
- + written = sts_ring_buffer_send(buf, send_buffer, p, NULL);
- + if (written > 0) {
- + /* buffer drained */
- + ring_buffer_put(mp, buf);
- + } else if (written < 0 && ! IO_IS_BLOCKED()) {
- + /* unfixable error */
- perror("send");
- goto shut_conn;
- + } else {
- + /* buffer is not empty */
- + sts_fifo_return(conn->buf_txq, buf);
- }
- -
- - if (sts_ring_buffer_used(buf))
- - break;
- -
- - buf = sts_fifo_get(conn->buf_txq);
- - ring_buffer_put(mp, buf);
- }
- - /* If nothing to send, stop watching */
- - if (sts_fifo_last(conn->buf_txq) == NULL)
- - ev_io_stop(loop, w);
- -
- - /* return if read watcher is on, otherwise ... */
- - if (ev_is_active(&conn->rd))
- - return;
- + return;
- /* ... connection is to shut down */
- shut_conn:
- diff --git a/lib/libsts_evloop/sts_tcpsrv.c b/lib/libsts_evloop/sts_tcpsrv.c
- index 390b781..d034ce0 100644
- --- a/lib/libsts_evloop/sts_tcpsrv.c
- +++ b/lib/libsts_evloop/sts_tcpsrv.c
- @@ -346,21 +346,18 @@ sts_evloop_srv_send(void *arg, const void *data, size_t len)
- buf = sts_fifo_last(conn->buf_txq);
- for (written = 0; written < len; written += ret) {
- - if (buf == NULL) {
- + if (buf == NULL || sts_ring_buffer_unused(buf) == 0) {
- + /* no buffer or full buffer */
- if ((buf = ring_buffer_get(mp)) == NULL)
- break;
- if (sts_fifo_put(conn->buf_txq, buf) == 0)
- break;
- }
- ret = sts_ring_buffer_add(buf, p + written, len - written);
- - if (ret == 0)
- - /* full buffer */
- - buf = NULL;
- }
- - if (written) {
- + if (written)
- ev_io_start(conn->srv->evl, &conn->wr);
- - }
- return written;
- }
Add Comment
Please, Sign In to add comment