summaryrefslogtreecommitdiff
path: root/uring.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-05 19:34:52 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-05 19:34:52 +0200
commita683051b05930d1dd2766b98494bbd124817a6dd (patch)
treedcc2ab910af026c8cf32df5dc7d548a665098082 /uring.c
parent3d2d0d4b3aa64aba018b049edf9c0396d5a598d5 (diff)
Implement more proxy functionality
Diffstat (limited to 'uring.c')
-rw-r--r--uring.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/uring.c b/uring.c
index c43a8fb..96e3a67 100644
--- a/uring.c
+++ b/uring.c
@@ -142,6 +142,25 @@ uring_close(struct cfg *cfg, struct uring_task *task, int fd, callback_t callbac
}
void
+uring_write(struct cfg *cfg, struct uring_task *task, void *buf, size_t len, callback_t callback)
+{
+ struct io_uring_sqe *sqe = io_uring_get_sqe(&cfg->uev->uring);
+
+ if (!sqe)
+ perrordie("io_uring_sqe");
+
+ if (task->fd < 0) {
+ error("uring_write called with no fd set\n");
+ return;
+ }
+
+ uring_task_get(cfg, task);
+ task->callback = callback;
+ io_uring_prep_write(sqe, task->fd, buf, len, 0);
+ io_uring_sqe_set_data(sqe, task);
+}
+
+void
uring_read(struct cfg *cfg, struct uring_task *task, void *buf, size_t len, off_t offset, callback_t callback)
{
struct io_uring_sqe *sqe = io_uring_get_sqe(&cfg->uev->uring);