Skip to main content

dope_core/driver/
bootstrap.rs

1use std::io;
2use std::net::SocketAddr;
3
4use super::DriverContext;
5use crate::backend::Backend;
6use crate::backend::ops::raw::bootstrap::BootstrapBackend;
7use crate::io::fd::Fd;
8use crate::io::socket::ListenerConfig;
9
10pub trait Bootstrap<'d> {
11    fn bind_listener_slot(
12        &mut self,
13        addr: SocketAddr,
14        backlog: i32,
15        config: &ListenerConfig,
16    ) -> io::Result<(Fd<'d>, SocketAddr)>;
17    fn bind_datagram_slot(&mut self, addr: SocketAddr) -> io::Result<(Fd<'d>, SocketAddr)>;
18}
19
20impl<'d> Bootstrap<'d> for DriverContext<'_, 'd> {
21    fn bind_listener_slot(
22        &mut self,
23        addr: SocketAddr,
24        backlog: i32,
25        config: &ListenerConfig,
26    ) -> io::Result<(Fd<'d>, SocketAddr)> {
27        <Backend as BootstrapBackend>::bind_listener_slot(self, addr, backlog, config)
28    }
29
30    fn bind_datagram_slot(&mut self, addr: SocketAddr) -> io::Result<(Fd<'d>, SocketAddr)> {
31        <Backend as BootstrapBackend>::bind_datagram_slot(self, addr)
32    }
33}