github.com/pawelgaczynski/giouring@v0.0.0-20230826085535-69588b89acb9/README.md (about)

     1  <a name="readme-top"></a>
     2  
     3  # giouring - about the project
     4  
     5  **giouring** is a Go port of the [liburing](https://github.com/axboe/liburing) library. It is written entirely in Go. No cgo.
     6  
     7  Almost all functions and structures from [liburing](https://github.com/axboe/liburing) was implemented.
     8  
     9  * **giouring** versioning is aligned with [liburing](https://github.com/axboe/liburing) versioning.
    10  * **giouring** is currently up to date with [liburing](https://github.com/axboe/liburing) commit: [e1e758ae8360521334399c2a6eace05fa518e218](https://github.com/axboe/liburing/commit/e1e758ae8360521334399c2a6eace05fa518e218)
    11  
    12  
    13  The **giouring** API is very similar to the [liburing](https://github.com/axboe/liburing) API, so anyone familiar with [liburing](https://github.com/axboe/liburing) will find it easier when writing code. Significant changes include:
    14  * Method and structure names have been aligned with the naming conventions of the Go language.
    15  * The prefix *io_uring* has been removed from method and structure names. After importing the package, methods and types will be preceded by the library name: *giouring*.
    16  * *SQE* and *CQE* types have been given full names: *SubmissionQueueEntry* and *CompletionQueueEvent*.
    17  * Additionally, if a method primarily pertains to a specific structure, for example, all methods prefixed with *io_uring_prep* that are related to the *SubmissionQueueEntry* structure (in [liburing](https://github.com/axboe/liburing): *io_uring_sqe*), the pointer that was passed in C as a method argument has been moved to the method receiver.
    18  
    19  #### Important notice
    20  
    21  * **giouring** was tested on kernel version *6.2.0-27-generic*. Keep in mind that when running unit tests on older kernel versions, some tests may fail because the older kernel may not support some functionality. This will be fixed in the future.
    22  * Test coverage is currently low, but it will be systematically expanded.
    23  
    24  ### Documentation
    25  
    26  [![Go Reference](https://pkg.go.dev/badge/github.com/pawelgaczynski/giouring.svg)](https://pkg.go.dev/github.com/pawelgaczynski/giouring)
    27  
    28  <p align="right">(<a href="#readme-top">back to top</a>)</p>
    29  
    30  ## Used by
    31  
    32  * [Gain - a high-performance io_uring networking framework written entirely in Go.](https://github.com/pawelgaczynski/gain)
    33  
    34  <p align="right">(<a href="#readme-top">back to top</a>)</p>
    35  
    36  ## Prerequisites
    37  Gain requires Go 1.20+
    38  
    39  <p align="right">(<a href="#readme-top">back to top</a>)</p>
    40  
    41  ## Implemented structs
    42  
    43  | liburing name | Golang liburing port name | Notes | Implemented |
    44  | -------- | ------- | ------- | ------- |
    45  | io_uring_sq | SubmissionQueue |  | :heavy_check_mark: |
    46  | io_uring_cq | CompletionQueue |  | :heavy_check_mark: |
    47  | io_uring | Ring |  | :heavy_check_mark: |
    48  | io_uring_sqe | SubmissionQueueEntry |  | :heavy_check_mark: |
    49  | io_uring_cqe | CompletionQueueEvent |  | :heavy_check_mark: |
    50  | io_sqring_offsets | SQRingOffsets |  | :heavy_check_mark: |
    51  | io_cqring_offsets | CQRingOffsets |  | :heavy_check_mark: |
    52  | io_uring_params | Params |  | :heavy_check_mark: |
    53  | io_uring_files_update | FilesUpdate |  | :heavy_check_mark: |
    54  | io_uring_rsrc_register | RsrcRegister |  | :heavy_check_mark: |
    55  | io_uring_rsrc_update | RsrcUpdate |  | :heavy_check_mark: |
    56  | io_uring_rsrc_update2 | RsrcUpdate2 |  | :heavy_check_mark: |
    57  | io_uring_probe_op | ProbeOp |  | :heavy_check_mark: |
    58  | io_uring_probe | Probe |  | :heavy_check_mark: |
    59  | io_uring_restriction | Restriction |  | :heavy_check_mark: |
    60  | io_uring_buf | BufAndRing |  | :heavy_check_mark: |
    61  | io_uring_buf_ring | BufAndRing |  | :heavy_check_mark: |
    62  | io_uring_buf_reg | BufReg |  | :heavy_check_mark: |
    63  | io_uring_getevents_arg | GetEventsArg |  | :heavy_check_mark: |
    64  | io_uring_sync_cancel_reg | SyncCancelReg |  | :heavy_check_mark: |
    65  | io_uring_file_index_range | FileIndexRange |  | :heavy_check_mark: |
    66  | io_uring_recvmsg_out | RecvmsgOut |  | :heavy_check_mark: |
    67  
    68  <p align="right">(<a href="#readme-top">back to top</a>)</p>
    69  
    70  ## Implemented methods
    71  
    72  | liburing name | Receiver type | Golang liburing port name | Notes | Implemented |
    73  | -------- | ------- | ------- | ------- | ------- |
    74  | [IO_URING_CHECK_VERSION](https://manpages.debian.org/unstable/liburing-dev/IO_URING_CHECK_VERSION.3.en.html) |  |  |  |  |
    75  | [IO_URING_VERSION_MAJOR](https://manpages.debian.org/unstable/liburing-dev/IO_URING_CHECK_VERSION.3.en.html) |  |  |  |  |
    76  | [IO_URING_VERSION_MINOR](https://manpages.debian.org/unstable/liburing-dev/IO_URING_CHECK_VERSION.3.en.html) |  |  |  |  |
    77  | [io_uring_buf_ring_add](https://manpages.debian.org/unstable/liburing-dev/io_uring_buf_ring_add.3.en.html) | BufAndRing | [BufRingAdd](buffer.go) | | :heavy_check_mark: |
    78  | [io_uring_buf_ring_advance](https://manpages.debian.org/unstable/liburing-dev/io_uring_buf_ring_advance.3.en.html) | BufAndRing | [BufRingAdvance](buffer.go) |  | :heavy_check_mark: |
    79  | [io_uring_buf_ring_cq_advance](https://manpages.debian.org/unstable/liburing-dev/io_uring_buf_ring_cq_advance.3.en.html) | Ring | [BufRingCQAdvance](buffer.go) |  | :heavy_check_mark: |
    80  | [io_uring_buf_ring_init](https://manpages.debian.org/unstable/liburing-dev/io_uring_buf_ring_init.3.en.html) | BufAndRing | [BufRingInit](buffer.go) |  | :heavy_check_mark: |
    81  | [io_uring_buf_ring_mask](https://manpages.debian.org/unstable/liburing-dev/io_uring_buf_ring_mask.3.en.html) |  | [BufRingMask]() |  | :heavy_check_mark: |
    82  | [io_uring_check_version](https://manpages.debian.org/unstable/liburing-dev/io_uring_check_version.3.en.html) |  | [CheckVersion](version.go) |  | :heavy_check_mark: |
    83  | [io_uring_close_ring_fd](https://manpages.debian.org/unstable/liburing-dev/io_uring_close_ring_fd.3.en.html) | Ring | [CloseRingFd](register.go) |  | :heavy_check_mark: |
    84  | [io_uring_cq_advance](https://manpages.debian.org/unstable/liburing-dev/io_uring_cq_advance.3.en.html) | Ring | [CQAdvance](lib.go) |  | :heavy_check_mark: |
    85  | [io_uring_cq_has_overflow](https://manpages.debian.org/unstable/liburing-dev/io_uring_cq_has_overflow.3.en.html) | Ring | [CQHasOverflow](lib.go) |  | :heavy_check_mark: |
    86  | [io_uring_cq_ready](https://manpages.debian.org/unstable/liburing-dev/io_uring_cq_ready.3.en.html) | Ring | [CQReady](lib.go) |  | :heavy_check_mark: |
    87  | [io_uring_cqe_get_data](https://manpages.debian.org/unstable/liburing-dev/io_uring_cqe_get_data.3.en.html) | CompletionQueueEvent | [GetData](lib.go) |  | :heavy_check_mark: |
    88  | [io_uring_cqe_get_data64](https://manpages.debian.org/unstable/liburing-dev/io_uring_cqe_get_data64.3.en.html) |  CompletionQueueEvent| [GetData64](lib.go) |  | :heavy_check_mark: |
    89  | [io_uring_cqe_seen](https://manpages.debian.org/unstable/liburing-dev/io_uring_cqe_seen.3.en.html) | Ring | [CQESeen](lib.go) |  | :heavy_check_mark: |
    90  | [io_uring_enter](https://manpages.debian.org/unstable/liburing-dev/io_uring_enter.2.en.html) | Ring | [Enter](syscall.go) |  | :heavy_check_mark: |
    91  | [io_uring_enter2](https://manpages.debian.org/unstable/liburing-dev/io_uring_enter2.2.en.html) | Ring | [Enter2](syscall.go) |  | :heavy_check_mark: |
    92  | [io_uring_for_each_cqe](https://manpages.debian.org/unstable/liburing-dev/io_uring_for_each_cqe.3.en.html) | Ring | [ForEachCQE](lib.go) |  | :heavy_check_mark: |
    93  | [io_uring_free_buf_ring](https://manpages.debian.org/unstable/liburing-dev/io_uring_free_buf_ring.3.en.html) | Ring | [FreeBufRing](setup.ho) |  | :heavy_check_mark: |
    94  | [io_uring_free_probe](https://manpages.debian.org/unstable/liburing-dev/io_uring_free_probe.3.en.html) |  |  | :heavy_exclamation_mark:unnecessary | :heavy_multiplication_x: |
    95  | [io_uring_get_events](https://manpages.debian.org/unstable/liburing-dev/io_uring_get_events.3.en.html) | Ring | [GetEvents](queue.go) |  | :heavy_check_mark: |
    96  | [io_uring_get_probe](https://manpages.debian.org/unstable/liburing-dev/io_uring_get_probe.3.en.html) |  | [GetProbe](probe.go) |  | :heavy_check_mark: |
    97  | io_uring_get_probe_ring | Ring | [GetProbeRing](probe.go) |  | :heavy_check_mark: |
    98  | [io_uring_get_sqe](https://manpages.debian.org/unstable/liburing-dev/io_uring_get_sqe.3.en.html) | Ring | [GetSQE](lib.go) |  | :heavy_check_mark: |
    99  | [io_uring_major_version](https://manpages.debian.org/unstable/liburing-dev/io_uring_major_version.3.en.html) |  | [MajorVersion](version.go) |  | :heavy_check_mark: |
   100  | [io_uring_minor_version](https://manpages.debian.org/unstable/liburing-dev/io_uring_minor_version.3.en.html) |  | [MinorVersion](version.go) |  | :heavy_check_mark: |
   101  | [io_uring_opcode_supported](https://manpages.debian.org/unstable/liburing-dev/io_uring_opcode_supported.3.en.html) | Probe | [IsSupported](probe.go) |  | :heavy_check_mark: |
   102  | [io_uring_peek_cqe](https://manpages.debian.org/unstable/liburing-dev/io_uring_peek_cqe.3.en.html) | Ring | [PeekCQE](lib.go) |  | :heavy_check_mark: |
   103  | [io_uring_prep_accept](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_accept.3.en.html) | SubmissionQueueEntry | [PrepareAccept](prepare.go) |  | :heavy_check_mark: |
   104  | [io_uring_prep_accept_direct](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_accept_direct.3.en.html) | SubmissionQueueEntry | [PrepareAcceptDirect](prepare.go) |  | :heavy_check_mark: |
   105  | [io_uring_prep_cancel](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_cancel.3.en.html) | SubmissionQueueEntry | [PrepareCancel](prepare.go) |  | :heavy_check_mark: |
   106  | [io_uring_prep_cancel64](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_cancel64.3.en.html) | SubmissionQueueEntry | [PrepareCancel64](prepare.go) |  | :heavy_check_mark: |
   107  | [io_uring_prep_close](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_close.3.en.html) | SubmissionQueueEntry | [PrepareClose](prepare.go) |  | :heavy_check_mark: |
   108  | [io_uring_prep_close_direct](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_close_direct.3.en.html) | SubmissionQueueEntry | [PrepareCloseDirect](prepare.go) |  | :heavy_check_mark: |
   109  | [io_uring_prep_connect](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_connect.3.en.html) | SubmissionQueueEntry | [PrepareConnect](prepare.go) |  | :heavy_check_mark: |
   110  | [io_uring_prep_fadvise](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_fadvise.3.en.html) | SubmissionQueueEntry | [PrepareFadvise](prepare.go) |  | :heavy_check_mark: |
   111  | [io_uring_prep_fallocate](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_fallocate.3.en.html) | SubmissionQueueEntry | [PrepareFallocate](prepare.go) |  | :heavy_check_mark: |
   112  | [io_uring_prep_fgetxattr](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_fgetxattr.3.en.html) | SubmissionQueueEntry | [PrepareFgetxattr](prepare.go) |  | :heavy_check_mark: |
   113  | [io_uring_prep_files_update](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_files_update.3.en.html) | SubmissionQueueEntry | [PrepareFilesUpdate](prepare.go) |  | :heavy_check_mark: |
   114  | [io_uring_prep_fsetxattr](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_fsetxattr.3.en.html) | SubmissionQueueEntry | [PrepareFsetxattr](prepare.go) |  | :heavy_check_mark: |
   115  | [io_uring_prep_fsync](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_fsync.3.en.html) | SubmissionQueueEntry | [PrepareFsync](prepare.go) |  | :heavy_check_mark: |
   116  | [io_uring_prep_getxattr](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_getxattr.3.en.html) | SubmissionQueueEntry | [PrepareGetxattr](prepare.go) |  | :heavy_check_mark: |
   117  | [io_uring_prep_link](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_link.3.en.html) | SubmissionQueueEntry | [PrepareLink](prepare.go) |  | :heavy_check_mark: |
   118  | [io_uring_prep_link_timeout](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_link_timeout.3.en.html) | SubmissionQueueEntry | [PrepareLinkTimeout](prepare.go) |  | :heavy_check_mark: |
   119  | [io_uring_prep_linkat](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_linkat.3.en.html) | SubmissionQueueEntry | [PrepareLinkat](prepare.go) |  | :heavy_check_mark: |
   120  | [io_uring_prep_madvise](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_madvise.3.en.html) | SubmissionQueueEntry | [PrepareMadvise](prepare.go) |  | :heavy_check_mark: |
   121  | [io_uring_prep_mkdir](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_mkdir.3.en.html) | SubmissionQueueEntry | [PrepareMkdir](prepare.go) |  | :heavy_check_mark: |
   122  | [io_uring_prep_mkdirat](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_mkdirat.3.en.html) | SubmissionQueueEntry | [PrepareMkdirat](prepare.go) |  | :heavy_check_mark: |
   123  | [io_uring_prep_msg_ring](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_msg_ring.3.en.html) | SubmissionQueueEntry | [PrepareMsgRing](prepare.go) |  | :heavy_check_mark: |
   124  | [io_uring_prep_msg_ring_cqe_flags](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_msg_ring_cqe_flags.3.en.html) | SubmissionQueueEntry | [PrepareMsgRingCqeFlags](prepare.go) |  | :heavy_check_mark: |
   125  | [io_uring_prep_msg_ring_fd](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_msg_ring_fd.3.en.html) | SubmissionQueueEntry | [PrepareMsgRingFd](prepare.go) |  | :heavy_check_mark: |
   126  | [io_uring_prep_msg_ring_fd_alloc](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_msg_ring_fd_alloc.3.en.html) | SubmissionQueueEntry | [PrepareMsgRingFdAlloc](prepare.go) |  | :heavy_check_mark: |
   127  | [io_uring_prep_multishot_accept](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_multishot_accept.3.en.html) | SubmissionQueueEntry | [PrepareMultishotAccept](prepare.go) |  | :heavy_check_mark: |
   128  | [io_uring_prep_multishot_accept_direct](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_multishot_accept_direct.3.en.html) | SubmissionQueueEntry | [PrepareMultishotAcceptDirect](prepare.go) |  | :heavy_check_mark: |
   129  | [io_uring_prep_nop](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_nop.3.en.html) | SubmissionQueueEntry | [PrepareNop](prepare.go) |  | :heavy_check_mark: |
   130  | [io_uring_prep_openat](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_openat.3.en.html) | SubmissionQueueEntry | [PrepareOpenat](prepare.go) |  | :heavy_check_mark: |
   131  | [io_uring_prep_openat2](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_openat2.3.en.html) | SubmissionQueueEntry | [PrepareOpenat2](prepare.go) |  | :heavy_check_mark: |
   132  | [io_uring_prep_openat2_direct](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_openat2_direct.3.en.html) | SubmissionQueueEntry | [PrepareOpenat2Direct](prepare.go) |  | :heavy_check_mark: |
   133  | [io_uring_prep_openat_direct](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_openat_direct.3.en.html) | SubmissionQueueEntry | [PrepareOpenatDirect](prepare.go) |  | :heavy_check_mark: |
   134  | [io_uring_prep_poll_add](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_poll_add.3.en.html) | SubmissionQueueEntry | [PreparePollAdd](prepare.go) |  | :heavy_check_mark: |
   135  | [io_uring_prep_poll_multishot](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_poll_multishot.3.en.html) | SubmissionQueueEntry | [PreparePollMultishot](prepare.go) |  | :heavy_check_mark: |
   136  | [io_uring_prep_poll_remove](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_poll_remove.3.en.html) | SubmissionQueueEntry | [PreparePollRemove](prepare.go) |  | :heavy_check_mark: |
   137  | [io_uring_prep_poll_update](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_poll_update.3.en.html) | SubmissionQueueEntry | [PreparePollUpdate](prepare.go) |  | :heavy_check_mark: |
   138  | [io_uring_prep_provide_buffers](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_provide_buffers.3.en.html) | SubmissionQueueEntry | [PrepareProvideBuffers](prepare.go) |  | :heavy_check_mark: |
   139  | [io_uring_prep_read](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_read.3.en.html) | SubmissionQueueEntry | [PrepareRead](prepare.go) |  | :heavy_check_mark: |
   140  | [io_uring_prep_read_fixed](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_read_fixed.3.en.html) | SubmissionQueueEntry | [PrepareReadFixed](prepare.go) |  | :heavy_check_mark: |
   141  | [io_uring_prep_readv](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_readv.3.en.html) | SubmissionQueueEntry | [PrepareReadv](prepare.go) |  | :heavy_check_mark: |
   142  | [io_uring_prep_readv2](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_readv2.3.en.html) | SubmissionQueueEntry | [PrepareReadv2](prepare.go) |  | :heavy_check_mark: |
   143  | [io_uring_prep_recv](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_recv.3.en.html) | SubmissionQueueEntry | [PrepareRecv](prepare.go) |  | :heavy_check_mark: |
   144  | [io_uring_prep_recv_multishot](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_recv_multishot.3.en.html) | SubmissionQueueEntry | [PrepareRecvMultishot](prepare.go) |  | :heavy_check_mark: |
   145  | [io_uring_prep_recvmsg](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_recvmsg.3.en.html) | SubmissionQueueEntry | [PrepareRecvMsg](prepare.go) |  | :heavy_check_mark: |
   146  | [io_uring_prep_recvmsg_multishot](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_recvmsg_multishot.3.en.html) | SubmissionQueueEntry | [PrepareRecvMsgMultishot](prepare.go) |  | :heavy_check_mark: |
   147  | [io_uring_prep_remove_buffers](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_remove_buffers.3.en.html) | SubmissionQueueEntry | [PrepareRemoveBuffers](prepare.go) |  | :heavy_check_mark: |
   148  | [io_uring_prep_rename](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_rename.3.en.html) | SubmissionQueueEntry | [PrepareRename](prepare.go) |  | :heavy_check_mark: |
   149  | [io_uring_prep_renameat](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_renameat.3.en.html) | SubmissionQueueEntry | [PrepareRenameat](prepare.go) |  | :heavy_check_mark: |
   150  | [io_uring_prep_send](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_send.3.en.html) | SubmissionQueueEntry | [PrepareSend](prepare.go) |  | :heavy_check_mark: |
   151  | [io_uring_prep_send_set_addr](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_send_set_addr.3.en.html) | SubmissionQueueEntry | [PrepareSendSetAddr](prepare.go) |  | :heavy_check_mark: |
   152  | [io_uring_prep_send_zc](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_send_zc.3.en.html) | SubmissionQueueEntry | [PrepareSendZC](prepare.go) |  | :heavy_check_mark: |
   153  | [io_uring_prep_send_zc_fixed](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_send_zc_fixed.3.en.html) | SubmissionQueueEntry | [PrepareSendZCFixed](prepare.go) |  | :heavy_check_mark: |
   154  | [io_uring_prep_sendmsg](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_sendmsg.3.en.html) | SubmissionQueueEntry | [PrepareSendMsg](prepare.go) |  | :heavy_check_mark: |
   155  | [io_uring_prep_sendmsg_zc](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_sendmsg_zc.3.en.html) | SubmissionQueueEntry | [PrepareSendmsgZC](prepare.go) |  | :heavy_check_mark: |
   156  | [io_uring_prep_sendto](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_sendto.3.en.html) | SubmissionQueueEntry | [PrepareSendto](prepare.go) |  | :heavy_check_mark: |
   157  | [io_uring_prep_setxattr](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_setxattr.3.en.html) | SubmissionQueueEntry | [PrepareSetxattr](prepare.go) |  | :heavy_check_mark: |
   158  | [io_uring_prep_shutdown](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_shutdown.3.en.html) | SubmissionQueueEntry | [PrepareShutdown](prepare.go) |  | :heavy_check_mark: |
   159  | [io_uring_prep_socket](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_socket.3.en.html) | SubmissionQueueEntry | [PrepareSocket](prepare.go) |  | :heavy_check_mark: |
   160  | [io_uring_prep_socket_direct](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_socket_direct.3.en.html) | SubmissionQueueEntry | [PrepareSocketDirect](prepare.go) |  | :heavy_check_mark: |
   161  | [io_uring_prep_socket_direct_alloc](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_socket_direct_alloc.3.en.html) | SubmissionQueueEntry | [PrepareSocketDirectAlloc](prepare.go) |  | :heavy_check_mark: |
   162  | [io_uring_prep_splice](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_splice.3.en.html) | SubmissionQueueEntry | [PrepareSplice](prepare.go) |  | :heavy_check_mark: |
   163  | [io_uring_prep_statx](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_statx.3.en.html) | SubmissionQueueEntry | [PrepareStatx](prepare.go) |  | :heavy_check_mark: |
   164  | [io_uring_prep_symlink](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_symlink.3.en.html) | SubmissionQueueEntry | [PrepareSymlink](prepare.go) |  | :heavy_check_mark: |
   165  | [io_uring_prep_symlinkat](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_symlinkat.3.en.html) | SubmissionQueueEntry | [PrepareSymlinkat](prepare.go) |  | :heavy_check_mark: |
   166  | [io_uring_prep_sync_file_range](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_sync_file_range.3.en.html) | SubmissionQueueEntry | [PrepareSyncFileRange](prepare.go) |  | :heavy_check_mark: |
   167  | [io_uring_prep_tee](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_tee.3.en.html) | SubmissionQueueEntry | [PrepareTee](prepare.go) |  | :heavy_check_mark: |
   168  | [io_uring_prep_timeout](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_timeout.3.en.html) | SubmissionQueueEntry | [PrepareTimeout](prepare.go) |  | :heavy_check_mark: |
   169  | [io_uring_prep_timeout_remove](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_timeout_remove.3.en.html) | SubmissionQueueEntry | [PrepareTimeoutRemove](prepare.go) |  | :heavy_check_mark: |
   170  | [io_uring_prep_timeout_update](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_timeout_update.3.en.html) | SubmissionQueueEntry | [PrepareTimeoutUpdate](prepare.go) |  | :heavy_check_mark: |
   171  | [io_uring_prep_unlink](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_unlink.3.en.html) | SubmissionQueueEntry | [PrepareUnlink](prepare.go) |  | :heavy_check_mark: |
   172  | [io_uring_prep_unlinkat](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_unlinkat.3.en.html) | SubmissionQueueEntry | [PrepareUnlinkat](prepare.go) |  | :heavy_check_mark: |
   173  | [io_uring_prep_write](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_write.3.en.html) | SubmissionQueueEntry | [PrepareWrite](prepare.go) |  | :heavy_check_mark: |
   174  | [io_uring_prep_write_fixed](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_write_fixed.3.en.html) | SubmissionQueueEntry | [PrepareWriteFixed](prepare.go) |  | :heavy_check_mark: |
   175  | [io_uring_prep_writev](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_writev.3.en.html) | SubmissionQueueEntry | [PrepareWritev](prepare.go) |  | :heavy_check_mark: |
   176  | [io_uring_prep_writev2](https://manpages.debian.org/unstable/liburing-dev/io_uring_prep_writev2.3.en.html) | SubmissionQueueEntry | [PrepareWritev2](prepare.go) |  | :heavy_check_mark: |
   177  | [io_uring_queue_exit](https://manpages.debian.org/unstable/liburing-dev/io_uring_queue_exit.3.en.html) | Ring | [QueueExit](setup.go) |  | :heavy_check_mark: |
   178  | [io_uring_queue_init](https://manpages.debian.org/unstable/liburing-dev/io_uring_queue_init.3.en.html) | Ring | [QueueInit](setup.go) |  | :heavy_check_mark: |
   179  | [io_uring_queue_init_params](https://manpages.debian.org/unstable/liburing-dev/io_uring_queue_init_params.3.en.html) | Ring | [QueueInitParams](setup.go) |  | :heavy_check_mark: |
   180  | [io_uring_recvmsg_cmsg_firsthdr](https://manpages.debian.org/unstable/liburing-dev/io_uring_recvmsg_cmsg_firsthdr.3.en.html) | RecvmsgOut | [CmsgFirsthdr](recvmsg.go) |  | :heavy_check_mark: |
   181  | [io_uring_recvmsg_cmsg_nexthdr](https://manpages.debian.org/unstable/liburing-dev/io_uring_recvmsg_cmsg_nexthdr.3.en.html) | RecvmsgOut | [CmsgNexthdr](recvmsg.go) |  | :heavy_check_mark: |
   182  | [io_uring_recvmsg_name](https://manpages.debian.org/unstable/liburing-dev/io_uring_recvmsg_name.3.en.html) | RecvmsgOut | [Name](recvmsg.go) |  | :heavy_check_mark: |
   183  | [io_uring_recvmsg_payload](https://manpages.debian.org/unstable/liburing-dev/io_uring_recvmsg_payload.3.en.html) |  RecvmsgOut| [Payload](recvmsg.go) |  | :heavy_check_mark: |
   184  | [io_uring_recvmsg_payload_length](https://manpages.debian.org/unstable/liburing-dev/io_uring_recvmsg_payload_length.3.en.html) | RecvmsgOut | [PayloadLength](recvmsg.go) |  | :heavy_check_mark: |
   185  | [io_uring_recvmsg_validate](https://manpages.debian.org/unstable/liburing-dev/io_uring_recvmsg_validate.3.en.html) | RecvmsgOut | [RecvmsgValidate](recvmsg.go) |  | :heavy_check_mark: |
   186  | [io_uring_register](https://manpages.debian.org/unstable/liburing-dev/io_uring_register.2.en.html) | Ring | [Register](syscall.go) |  | :heavy_check_mark: |
   187  | [io_uring_register_buf_ring](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_buf_ring.3.en.html) | Ring | [RegisterBufferRing](register.go) |  | :heavy_check_mark: |
   188  | [io_uring_register_buffers](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_buffers.3.en.html) | Ring | [RegisterBuffers](register.go) |  | :heavy_check_mark: |
   189  | [io_uring_register_buffers_sparse](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_buffers_sparse.3.en.html) | Ring | [RegisterBuffersSparse](register.go) |  | :heavy_check_mark: |
   190  | [io_uring_register_buffers_tags](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_buffers_tags.3.en.html) | Ring | [RegisterBuffersTags](register.go) |  | :heavy_check_mark: |
   191  | [io_uring_register_buffers_update_tag](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_buffers_update_tag.3.en.html) | Ring | [RegisterBuffersUpdateTag](register.go) |  | :heavy_check_mark: |
   192  | [io_uring_register_eventfd](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_eventfd.3.en.html) | Ring | [RegisterEventFd](register.go) |  | :heavy_check_mark: |
   193  | [io_uring_register_eventfd_async](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_eventfd_async.3.en.html) | Ring | [RegisterEventFdAsync](register.go) |  | :heavy_check_mark: |
   194  | [io_uring_register_file_alloc_range](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_file_alloc_range.3.en.html) | Ring | [RegisterFileAllocRange](register.go) |  | :heavy_check_mark: |
   195  | [io_uring_register_files](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_files.3.en.html) | Ring | [RegisterFiles](register.go) |  | :heavy_check_mark: |
   196  | [io_uring_register_files_sparse](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_files_sparse.3.en.html) | Ring | [RegisterFilesSparse](register.go) |  | :heavy_check_mark: |
   197  | [io_uring_register_files_tags](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_files_tags.3.en.html) | Ring | [RegisterFilesTags](register.go) |  | :heavy_check_mark: |
   198  | [io_uring_register_files_update](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_files_update.3.en.html) | Ring | [RegisterFilesUpdate](register.go) |  | :heavy_check_mark: |
   199  | [io_uring_register_files_update_tag](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_files_update_tag.3.en.html) | Ring | [RegisterFilesUpdateTag](register.go) |  | :heavy_check_mark: |
   200  | [io_uring_register_iowq_aff](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_iowq_aff.3.en.html) | Ring | [RegisterIOWQAff](register.go) |  | :heavy_check_mark: |
   201  | [io_uring_register_iowq_max_workers](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_iowq_max_workers.3.en.html) | Ring | [RegisterIOWQMaxWorkers](register.go) |  | :heavy_check_mark: |
   202  | [io_uring_register_ring_fd](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_ring_fd.3.en.html) | Ring | [RegisterRingFd](register.go) |  | :heavy_check_mark: |
   203  | [io_uring_register_sync_cancel](https://manpages.debian.org/unstable/liburing-dev/io_uring_register_sync_cancel.3.en.html) | Ring | [RegisterSyncCancel](register.go) |  | :heavy_check_mark: |
   204  | [io_uring_setup](https://manpages.debian.org/unstable/liburing-dev/io_uring_setup.2.en.html) |  | [Setup](syscall.go) |  | :heavy_check_mark: |
   205  | [io_uring_setup_buf_ring](https://manpages.debian.org/unstable/liburing-dev/io_uring_setup_buf_ring.3.en.html) | Ring | [SetupBufRing](setup.go) |  | :heavy_check_mark: |
   206  | [io_uring_sq_ready](https://manpages.debian.org/unstable/liburing-dev/io_uring_sq_ready.3.en.html) | Ring | [SQReady](lib.go) |  | :heavy_check_mark: |
   207  | [io_uring_sq_space_left](https://manpages.debian.org/unstable/liburing-dev/io_uring_sq_space_left.3.en.html) | Ring | [SQSpaceLeft](lib.go) |  | :heavy_check_mark: |
   208  | [io_uring_sqe_set_data](https://manpages.debian.org/unstable/liburing-dev/io_uring_sqe_set_data.3.en.html) | SubmissionQueueEntry | [SetData](lib.go) |  | :heavy_check_mark: |
   209  | [io_uring_sqe_set_data64](https://manpages.debian.org/unstable/liburing-dev/io_uring_sqe_set_data64.3.en.html) | SubmissionQueueEntry | [SetData64](lib.go) |  | :heavy_check_mark: |
   210  | [io_uring_sqe_set_flags](https://manpages.debian.org/unstable/liburing-dev/io_uring_sqe_set_flags.3.en.html) | SubmissionQueueEntry | [SetFlags](lib.go) |  | :heavy_check_mark: |
   211  | [io_uring_sqring_wait](https://manpages.debian.org/unstable/liburing-dev/io_uring_sqring_wait.3.en.html) | Ring | [SQRingWait](lib.go) |  | :heavy_check_mark: |
   212  | [io_uring_submit](https://manpages.debian.org/unstable/liburing-dev/io_uring_submit.3.en.html) | Ring | [Submit](queue.go) |  | :heavy_check_mark: |
   213  | [io_uring_submit_and_get_events](https://manpages.debian.org/unstable/liburing-dev/io_uring_submit_and_get_events.3.en.html) | Ring | [SubmitAndGetEvents](queue.go) |  | :heavy_check_mark: |
   214  | [io_uring_submit_and_wait](https://manpages.debian.org/unstable/liburing-dev/io_uring_submit_and_wait.3.en.html) | Ring | [SubmitAndWait](queue.go) |  | :heavy_check_mark: |
   215  | [io_uring_submit_and_wait_timeout](https://manpages.debian.org/unstable/liburing-dev/io_uring_submit_and_wait_timeout.3.en.html) | Ring | [SubmitAndWaitTimeout](queue.go) |  | :heavy_check_mark: |
   216  | [io_uring_unregister_buf_ring](https://manpages.debian.org/unstable/liburing-dev/io_uring_unregister_buf_ring.3.en.html) | Ring | [UnregisterBufferRing](register.go) |  | :heavy_check_mark: |
   217  | [io_uring_unregister_buffers](https://manpages.debian.org/unstable/liburing-dev/io_uring_unregister_buffers.3.en.html) | Ring | [UnregisterBuffers](register.go) |  | :heavy_check_mark: |
   218  | [io_uring_unregister_eventfd](https://manpages.debian.org/unstable/liburing-dev/io_uring_unregister_eventfd.3.en.html) | Ring | [UnregisterEventFd](register.go) |  | :heavy_check_mark: |
   219  | [io_uring_unregister_files](https://manpages.debian.org/unstable/liburing-dev/io_uring_unregister_files.3.en.html) | Ring | [UnregisterFiles](register.go) |  | :heavy_check_mark: |
   220  | [io_uring_unregister_iowq_aff](https://manpages.debian.org/unstable/liburing-dev/io_uring_unregister_iowq_aff.3.en.html) | Ring | [UnregisterIOWQAff](register.go) |  | :heavy_check_mark: |
   221  | [io_uring_unregister_ring_fd](https://manpages.debian.org/unstable/liburing-dev/io_uring_unregister_ring_fd.3.en.html) | Ring | [UnregisterRingFd](register.go) |  | :heavy_check_mark: |
   222  | [io_uring_wait_cqe](https://manpages.debian.org/unstable/liburing-dev/io_uring_wait_cqe.3.en.html) | Ring | [WaitCQE](lib.go) |  | :heavy_check_mark: |
   223  | [io_uring_wait_cqe_nr](https://manpages.debian.org/unstable/liburing-dev/io_uring_wait_cqe_nr.3.en.html) | Ring | [WaitCQENr](lib.go) |  | :heavy_check_mark: |
   224  | [io_uring_wait_cqe_timeout](https://manpages.debian.org/unstable/liburing-dev/io_uring_wait_cqe_timeout.3.en.html) | Ring | [WaitCQETimeout](queue.go) |  | :heavy_check_mark: |
   225  | [io_uring_wait_cqes](https://manpages.debian.org/unstable/liburing-dev/io_uring_wait_cqes.3.en.html) | Ring | [WaitCQEs](queue.go) |  | :heavy_check_mark: |
   226  
   227  <p align="right">(<a href="#readme-top">back to top</a>)</p>
   228  
   229  ## License
   230  
   231  Distributed under the MIT License. See `LICENSE` for more information.
   232  
   233  <p align="right">(<a href="#readme-top">back to top</a>)</p>
   234  
   235  
   236  ## Contact
   237  
   238  Paweł Gaczyński - [LinkedIn](http://linkedin.com/in/pawel-gaczynski)
   239  
   240  <p align="right">(<a href="#readme-top">back to top</a>)</p>
   241  
   242  
   243  ## Contributing
   244  
   245  Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
   246  
   247  If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
   248  Don't forget to give the project a star! Thanks again!
   249  
   250  1. Fork the Project
   251  2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
   252  3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
   253  4. Push to the Branch (`git push origin feature/AmazingFeature`)
   254  5. Open a Pull Request
   255  
   256  <p align="right">(<a href="#readme-top">back to top</a>)</p>