1cac7dca0Sopenharmony_ci// Copyright (c) 2023 Huawei Device Co., Ltd.
2cac7dca0Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
3cac7dca0Sopenharmony_ci// you may not use this file except in compliance with the License.
4cac7dca0Sopenharmony_ci// You may obtain a copy of the License at
5cac7dca0Sopenharmony_ci//
6cac7dca0Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
7cac7dca0Sopenharmony_ci//
8cac7dca0Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
9cac7dca0Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
10cac7dca0Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11cac7dca0Sopenharmony_ci// See the License for the specific language governing permissions and
12cac7dca0Sopenharmony_ci// limitations under the License.
13cac7dca0Sopenharmony_ci
14cac7dca0Sopenharmony_ci//! Event-driven non-blocking Tcp/Udp for unix
15cac7dca0Sopenharmony_ci
16cac7dca0Sopenharmony_cimacro_rules! syscall {
17cac7dca0Sopenharmony_ci    ($fn: ident ( $($arg: expr),* $(,)* ) ) => {{
18cac7dca0Sopenharmony_ci        let res = unsafe { libc::$fn($($arg, )*) };
19cac7dca0Sopenharmony_ci        if res == -1 {
20cac7dca0Sopenharmony_ci            Err(std::io::Error::last_os_error())
21cac7dca0Sopenharmony_ci        } else {
22cac7dca0Sopenharmony_ci            Ok(res)
23cac7dca0Sopenharmony_ci        }
24cac7dca0Sopenharmony_ci    }};
25cac7dca0Sopenharmony_ci}
26cac7dca0Sopenharmony_ci
27cac7dca0Sopenharmony_cicfg_tcp! {
28cac7dca0Sopenharmony_ci    mod tcp;
29cac7dca0Sopenharmony_ci    pub use self::tcp::{TcpListener, TcpStream};
30cac7dca0Sopenharmony_ci}
31cac7dca0Sopenharmony_ci
32cac7dca0Sopenharmony_cicfg_udp! {
33cac7dca0Sopenharmony_ci    mod udp;
34cac7dca0Sopenharmony_ci    pub use self::udp::{UdpSocket, ConnectedUdpSocket};
35cac7dca0Sopenharmony_ci}
36cac7dca0Sopenharmony_ci
37cac7dca0Sopenharmony_cimod uds;
38cac7dca0Sopenharmony_cipub use uds::{SocketAddr, UnixDatagram, UnixListener, UnixStream};
39cac7dca0Sopenharmony_ci
40cac7dca0Sopenharmony_ci#[cfg(target_os = "linux")]
41cac7dca0Sopenharmony_cimod epoll;
42cac7dca0Sopenharmony_ci#[cfg(target_os = "linux")]
43cac7dca0Sopenharmony_cipub use epoll::{Event, Events, Selector};
44cac7dca0Sopenharmony_ci
45cac7dca0Sopenharmony_cimod socket_addr;
46cac7dca0Sopenharmony_ci
47cac7dca0Sopenharmony_ci#[cfg(target_os = "macos")]
48cac7dca0Sopenharmony_cimod kqueue;
49cac7dca0Sopenharmony_ci#[cfg(target_os = "macos")]
50cac7dca0Sopenharmony_cipub use kqueue::{Event, Events, Selector};
51cac7dca0Sopenharmony_ci
52cac7dca0Sopenharmony_cipub(crate) mod socket;
53cac7dca0Sopenharmony_cimod waker;
54cac7dca0Sopenharmony_ci
55cac7dca0Sopenharmony_cipub(crate) use waker::WakerInner;
56cac7dca0Sopenharmony_ci
57cac7dca0Sopenharmony_cimod source_fd;
58cac7dca0Sopenharmony_cipub use source_fd::SourceFd;
59