pub trait TunnelProvider:
Sync
+ Send
+ 'static {
type Device: Send + Unpin + AsyncRead + AsyncWrite + 'static;
type State: Send + Sync + Clone + 'static;
// Required methods
fn get_device(&self) -> Result<Self::Device>;
fn state(&self) -> Self::State;
// Provided method
fn protect_socket_fd(&self, _fd: i32) { ... }
}