epoll-shim
brew install epoll-shim
v0.0.20240608
MIT
Small epoll implementation using kqueue
11
30-day installs · #8440
25
90-day · #9151
89
365-day · #9489
117
★ GitHub stars · updated 1y ago
Build dependencies
Links
- https://github.com/jiixyj/epoll-shim
- GitHub: jiixyj/epoll-shim
- Brew formula source: Formula/e/epoll-shim.rb
Raw metadata
{
"aliases": [],
"alternatives": [],
"build_dependencies": [
"cmake"
],
"categories": [],
"caveats": null,
"conflicts_with": [],
"dependencies": [],
"deprecated": 0,
"deprecation_reason": null,
"desc": "Small epoll implementation using kqueue",
"disable_reason": null,
"disabled": 0,
"enrichment_fetched_at": "2026-06-20T23:37:21+00:00",
"first_seen": "2026-06-20T23:34:18+00:00",
"full_name": "epoll-shim",
"github_default_branch": "master",
"github_last_commit_at": "2024-12-07T07:02:19Z",
"github_readme_excerpt": "# epoll-shim\n\nThis is a small library that implements epoll on top of kqueue.\nIt has been successfully used to port libinput, libevdev, Wayland and more\nsoftware to FreeBSD: \u003chttps://www.freshports.org/devel/libepoll-shim/\u003e\n\nIt may be useful for porting other software that uses epoll as well.\n\nThere are some tests inside `test/`. They should also compile under Linux and\ncan be used to verify proper epoll behavior.\n\nSadly, this library contains some very ugly hacks and workarounds. For example:\n\n- When using `timerfd`, `signalfd` or `eventfd`, the system calls `read`,\n `write` and `close` are redefined as macros to internal helper functions.\n This is needed as there is some internal context that has to be free\u0027d\n properly. This means that you shouldn\u0027t create a `timerfd`/`signalfd` in\n one part of a program and close it in a different part where\n `sys/timerfd.h` isn\u0027t included. The context would leak. Luckily, software\n such as libinput behaves very nicely and puts all `timerfd` related code in\n a single source file.\n\n Alternatively, a target/library `epoll-shim-interpose` is also provided.\n Instead of redefining those symbols as macros they are provided as \"proper\"\n symbols, making use of POSIX `dlsym` chaining with `RTLD_NEXT`.\n\n What approach is more suitable depends on the application: If the use of\n `epoll` is very localized the macro based approach is less overhead. If the\n use of those file descriptors is more pervasive, the interposition approach\n is more robust. It will be a bit less performant because all calls to\n `read`/`write`/`close` and so on will be routed through `epoll-shim`.\n\n- There is limited support for file descriptors that lack support for\n kqueue but are supported by `poll(2)`. This includes graphics or sound\n devices under `/dev`. Those descriptors are handled in an outer `poll(2)`\n loop. Edge triggering using `EPOLLET` will not work.\n\n- Shimmed file descriptors cannot be shared between processes. On `fork()`\n those fds ar",
"github_repo": "jiixyj/epoll-shim",
"github_stars": 117,
"github_topics": [],
"homepage": "https://github.com/jiixyj/epoll-shim",
"homepage_og_description": null,
"homepage_og_image": null,
"homepage_title": null,
"installs_30d": 11,
"installs_365d": 89,
"installs_90d": 25,
"keg_only": 0,
"keg_only_reason": null,
"last_seen": "2026-06-20T23:34:18+00:00",
"license": "MIT",
"llm_generated_at": null,
"llm_model": null,
"name": "epoll-shim",
"oldnames": [],
"one_liner": null,
"optional_dependencies": [],
"rank_30d": 8440,
"rank_365d": 9489,
"rank_90d": 9151,
"raw_hash": "e407f890eee78d47",
"recommended_dependencies": [],
"revision": 0,
"ruby_source_path": "Formula/e/epoll-shim.rb",
"tap": "homebrew/core",
"test_dependencies": [],
"uses_from_macos": [],
"version_head": null,
"version_stable": "0.0.20240608",
"versioned_formulae": [],
"why_use_this": null
}