network/
traits.rs

1use crate::{IP, Port, Protocol};
2use time::Duration;
3
4use file_system::{LocalFileIdentifier, LocalFileIdentifierIterator};
5
6use crate::Result;
7
8pub trait SocketDriver: Send + Sync {
9    fn get_new_socket_identifier(
10        &self,
11        iterator: LocalFileIdentifierIterator,
12    ) -> Result<Option<LocalFileIdentifier>>;
13
14    fn close(&self, socket: LocalFileIdentifier) -> Result<()>;
15
16    fn bind(
17        &self,
18        ip: IP,
19        port: Port,
20        protocol: Protocol,
21        socket: LocalFileIdentifier,
22    ) -> Result<()>;
23
24    fn connect(&self, ip: IP, port: Port, socket: LocalFileIdentifier) -> Result<()>;
25
26    fn accept(
27        &self,
28        socket: LocalFileIdentifier,
29        new_socket: LocalFileIdentifier,
30    ) -> Result<(IP, Port)>;
31
32    fn send(&self, socket: LocalFileIdentifier, data: &[u8]) -> Result<()>;
33
34    fn send_to(&self, socket: LocalFileIdentifier, data: &[u8], ip: IP, port: Port) -> Result<()>;
35
36    fn receive(&self, socket: LocalFileIdentifier, data: &mut [u8]) -> Result<usize>;
37
38    fn receive_from(
39        &self,
40        socket: LocalFileIdentifier,
41        data: &mut [u8],
42    ) -> Result<(usize, IP, Port)>;
43
44    fn get_local_address(&self, socket: LocalFileIdentifier) -> Result<(IP, Port)>;
45
46    fn get_remote_address(&self, socket: LocalFileIdentifier) -> Result<(IP, Port)>;
47
48    fn set_send_timeout(&self, socket: LocalFileIdentifier, timeout: Duration) -> Result<()>;
49
50    fn set_receive_timeout(&self, socket: LocalFileIdentifier, timeout: Duration) -> Result<()>;
51
52    fn get_send_timeout(&self, socket: LocalFileIdentifier) -> Result<Option<Duration>>;
53
54    fn get_receive_timeout(&self, socket: LocalFileIdentifier) -> Result<Option<Duration>>;
55}
56
57mod tests {}