• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 //     http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 use std::io;
15 
16 use crate::{Interest, Selector, Token};
17 
18 #[cfg(target_os = "linux")]
19 pub(crate) type Fd = i32;
20 
21 #[cfg(target_os = "windows")]
22 pub(crate) type Fd = std::os::windows::io::RawSocket;
23 
24 /// Source Trait that every connection requires async polling in [`crate::Poll`]
25 /// needs to implement. [`crate::Poll`] will asynchronously poll out
26 /// connections, and handle it.
27 pub trait Source {
28     /// Registers the connection into [`crate::Poll`]
register( &mut self, selector: &Selector, token: Token, interests: Interest, ) -> io::Result<()>29     fn register(
30         &mut self,
31         selector: &Selector,
32         token: Token,
33         interests: Interest,
34     ) -> io::Result<()>;
35 
36     /// Reregisters the connection into [`crate::Poll`], this can change
37     /// [`Interest`].
reregister( &mut self, selector: &Selector, token: Token, interests: Interest, ) -> io::Result<()>38     fn reregister(
39         &mut self,
40         selector: &Selector,
41         token: Token,
42         interests: Interest,
43     ) -> io::Result<()>;
44 
45     /// Deregisters the connection from [`crate::Poll`].
deregister(&mut self, selector: &Selector) -> io::Result<()>46     fn deregister(&mut self, selector: &Selector) -> io::Result<()>;
47 
48     /// Returns the raw fd of this IO.
as_raw_fd(&self) -> Fd49     fn as_raw_fd(&self) -> Fd;
50 }
51