ioreq.c (1519B)
1 #include "internal.h" 2 3 int 4 queue_ioreqs(struct io_uring *uring, struct ioreq *reqs, size_t len) 5 { 6 for (size_t i = 0; i < len; i++) { 7 struct ioreq *ioreq = &reqs[i]; 8 9 struct io_uring_sqe *sqe = io_uring_get_sqe(uring); 10 if (!sqe) 11 return -1; 12 13 switch (ioreq->type) { 14 case IOREQ_CONNECT: 15 io_uring_prep_connect(sqe, 16 ioreq->tag.connect.fd, 17 ioreq->tag.connect.addr, 18 ioreq->tag.connect.addrlen); 19 break; 20 21 case IOREQ_RECV: 22 io_uring_prep_recv(sqe, 23 ioreq->tag.recv.fd, 24 ioreq->tag.recv.buf, 25 ioreq->tag.recv.len, 26 ioreq->tag.recv.flags); 27 break; 28 29 case IOREQ_RECVFROM: 30 #if 0 31 io_uring_prep_recvfrom(sqe, 32 ioreq->tag.recvfrom.fd, 33 ioreq->tag.recvfrom.buf, 34 ioreq->tag.recvfrom.len, 35 ioreq->tag.recvfrom.flags, 36 ioreq->tag.recvfrom.addr, 37 ioreq->tag.recvfrom.addrlen); 38 #endif 39 break; 40 41 case IOREQ_SEND: 42 io_uring_prep_send(sqe, 43 ioreq->tag.send.fd, 44 ioreq->tag.recv.buf, 45 ioreq->tag.recv.len, 46 ioreq->tag.recv.flags); 47 break; 48 49 case IOREQ_SENDTO: 50 io_uring_prep_sendto(sqe, 51 ioreq->tag.sendto.fd, 52 ioreq->tag.sendto.buf, 53 ioreq->tag.sendto.len, 54 ioreq->tag.sendto.flags, 55 ioreq->tag.sendto.addr, 56 ioreq->tag.sendto.addrlen); 57 break; 58 59 case IOREQ_CLOSE: 60 io_uring_prep_close(sqe, 61 ioreq->tag.close.fd); 62 break; 63 } 64 65 io_uring_sqe_set_data(sqe, ioreq); 66 } 67 68 return 0; 69 }