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 {}