4 Create Y our Own Event Queue In this chapter, we'll create a simple version of an event queue using epoll. We'll take inspiration from mio (https://github. com/tokio-rs/mio ), a low-level I/O library written in Rust that underpins much of the Rust async ecosystem. Taking inspiration from mio has the added benefit of making it easier to dive into their code base if you wish to explore how a real production-ready library works. By the end of this chapter, you should be able to understand the following: The difference between blocking and non-blocking I/O How to use epoll to make your own event queue The source code of cross-platform event queue libraries such as mio Why we need an abstraction layer on top of epoll, kqueue, and IOCP if we want a program or library to work across different platforms We've divided the chapter into the following sections: Design and introduction to epoll The ffi module The Poll module The main program Technical requirements This chapter focuses on epoll, which is specific to Linux. Unfortunately, epoll is not part of the Portable Operating System Interface (POSIX ) standard, so this example will require you to run Linux and won't work with mac OS, BSD, or Windows operating systems. If you're on a machine running Linux, you're already set and can run the examples without any further steps.