diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-02-23 09:24:31 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-03-01 17:28:46 -0700 |
commit | 5a84ba2361cecade0343b88f696b6a63454cc3c6 (patch) | |
tree | 905a389bc9fdf072cbdf7e9f21b2b936881eb620 /lib9p/srv.c | |
parent | 188ac62a0c0f5519f5d45519fa7d224cb25305c6 (diff) |
Pull out libhw/generic/io.h, have it enforce iovecs everywhere
Diffstat (limited to 'lib9p/srv.c')
-rw-r--r-- | lib9p/srv.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/lib9p/srv.c b/lib9p/srv.c index c624fa8..932cd4d 100644 --- a/lib9p/srv.c +++ b/lib9p/srv.c @@ -141,15 +141,9 @@ struct _lib9p_srv_req { #define nonrespond_errorf errorf static ssize_t write_Rmsg(struct _lib9p_srv_req *req, struct lib9p_Rmsg_send_buf *resp) { - ssize_t r = 0, _r; + ssize_t r; cr_mutex_lock(&req->parent_sess->parent_conn->writelock); - for (size_t i = 0; i < resp->iov_cnt; i++) { - _r = LO_CALL(req->parent_sess->parent_conn->fd, write, - resp->iov[i].iov_base, resp->iov[i].iov_len); - if (_r < 0) - return _r; - r += _r; - } + r = io_writev(req->parent_sess->parent_conn->fd, resp->iov, resp->iov_cnt); cr_mutex_unlock(&req->parent_sess->parent_conn->writelock); return r; } @@ -195,7 +189,7 @@ static bool read_exactly(lo_interface net_stream_conn fd, uint8_t *buf, size_t g assert(goal); assert(done); while (*done < goal) { - ssize_t r = LO_CALL(fd, read, &buf[*done], goal - *done); + ssize_t r = io_read(fd, &buf[*done], goal - *done); if (r < 0) { nonrespond_errorf("read: %s", net_strerror(-r)); return true; @@ -293,12 +287,14 @@ static void handle_message(struct _lib9p_srv_req *ctx); _lib9p_srv_reqch_send_req(&srv->_reqch, &req); } close: - LO_CALL(conn.fd, close, true, sess.reqs.len == 0); - if (sess.reqs.len) { + if (sess.reqs.len == 0) + io_close(conn.fd); + else { + io_close_read(conn.fd); sess.closing = true; cr_pause_and_yield(); assert(sess.reqs.len == 0); - LO_CALL(conn.fd, close, true, true); + io_close_write(conn.fd); } } } |