Netty transport selection: epoll where available, NIO everywhere else, Unix domain sockets on epoll only.
Non-shaded Netty 4.2, whose event-loop API is MultiThreadIoEventLoopGroup over an IoHandler factory — the 4.1-era EpollEventLoopGroup constructors are deprecated shells around the same thing.
No Netty class appears in this namespace (or in server/client): everything Netty lives in clj-grpc.impl.netty, reached through requiring-resolve at first construction. That is the native-image contract — Clojure initializes referenced classes when a namespace loads, which under --initialize-at-build-time is image build time, where Netty's own metadata (correctly) forbids it. Deferring the load to first use makes it run time in both worlds. lazy_netty_test pins the contract.
Netty transport selection: epoll where available, NIO everywhere else, Unix domain sockets on epoll only. Non-shaded Netty 4.2, whose event-loop API is MultiThreadIoEventLoopGroup over an IoHandler factory — the 4.1-era EpollEventLoopGroup constructors are deprecated shells around the same thing. No Netty class appears in this namespace (or in server/client): everything Netty lives in clj-grpc.impl.netty, reached through requiring-resolve at first construction. That is the native-image contract — Clojure initializes referenced classes when a namespace loads, which under --initialize-at-build-time is image build time, where Netty's own metadata (correctly) forbids it. Deferring the load to first use makes it run time in both worlds. lazy_netty_test pins the contract.
(->address addr)Coerce the :address / target forms to a SocketAddress: an existing SocketAddress passes through, {:unix path} and "unix:///path" become domain socket addresses, an integer is a port on all interfaces.
Coerce the :address / target forms to a SocketAddress: an existing
SocketAddress passes through, {:unix path} and "unix:///path" become domain
socket addresses, an integer is a port on all interfaces.(event-loop-group transport threads)An event loop group for the transport, on daemon threads — see clj-grpc.impl.netty/event-loop-group for why daemon is non-negotiable.
An event loop group for the transport, on daemon threads — see clj-grpc.impl.netty/event-loop-group for why daemon is non-negotiable.
(resolve-transport transport)Turn the :transport opt into a concrete choice. :auto prefers epoll and falls back to :nio; asking for :epoll where it is unavailable is an error with Netty's own diagnosis as the cause.
Turn the :transport opt into a concrete choice. :auto prefers epoll and falls back to :nio; asking for :epoll where it is unavailable is an error with Netty's own diagnosis as the cause.
(unix path)A Unix domain socket address. Serving or dialing one requires the epoll transport; the server/client builders validate that eagerly.
A Unix domain socket address. Serving or dialing one requires the epoll transport; the server/client builders validate that eagerly.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |