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 windows
15cac7dca0Sopenharmony_ci
16cac7dca0Sopenharmony_cimacro_rules! syscall {
17cac7dca0Sopenharmony_ci    ($fn: ident ( $($arg: expr),* $(,)* ), $ret: expr) => {{
18cac7dca0Sopenharmony_ci        let res = unsafe { $fn($($arg, )*) };
19cac7dca0Sopenharmony_ci        if res == 0 {
20cac7dca0Sopenharmony_ci            Err(io::Error::last_os_error())
21cac7dca0Sopenharmony_ci        } else {
22cac7dca0Sopenharmony_ci            Ok($ret)
23cac7dca0Sopenharmony_ci        }
24cac7dca0Sopenharmony_ci    }};
25cac7dca0Sopenharmony_ci}
26cac7dca0Sopenharmony_ci
27cac7dca0Sopenharmony_cimod afd;
28cac7dca0Sopenharmony_cimod iocp;
29cac7dca0Sopenharmony_ci
30cac7dca0Sopenharmony_cimod selector;
31cac7dca0Sopenharmony_cipub use selector::Selector;
32cac7dca0Sopenharmony_ci
33cac7dca0Sopenharmony_cimod handle;
34cac7dca0Sopenharmony_ciuse handle::Handle;
35cac7dca0Sopenharmony_ci
36cac7dca0Sopenharmony_cimod events;
37cac7dca0Sopenharmony_cipub use events::{Event, Events};
38cac7dca0Sopenharmony_ci
39cac7dca0Sopenharmony_cimod overlapped;
40cac7dca0Sopenharmony_cipub(crate) use overlapped::Overlapped;
41cac7dca0Sopenharmony_ci
42cac7dca0Sopenharmony_cimod io_status_block;
43cac7dca0Sopenharmony_cimod socket_addr;
44cac7dca0Sopenharmony_ci
45cac7dca0Sopenharmony_cimod waker;
46cac7dca0Sopenharmony_cipub(crate) use waker::WakerInner;
47cac7dca0Sopenharmony_ci
48cac7dca0Sopenharmony_cimod net;
49cac7dca0Sopenharmony_cipub(crate) mod winapi;
50cac7dca0Sopenharmony_ci
51cac7dca0Sopenharmony_cipub(crate) use net::NetInner;
52cac7dca0Sopenharmony_cicfg_net! {
53cac7dca0Sopenharmony_ci    macro_rules! socket_syscall {
54cac7dca0Sopenharmony_ci        ($fn: ident ( $($arg: expr),* $(,)* ), $err_fn: path, $err_val: expr) => {{
55cac7dca0Sopenharmony_ci            let res = unsafe { $fn($($arg, )*) };
56cac7dca0Sopenharmony_ci            if $err_fn(&res, &$err_val) {
57cac7dca0Sopenharmony_ci                Err(io::Error::last_os_error())
58cac7dca0Sopenharmony_ci            } else {
59cac7dca0Sopenharmony_ci                Ok(res)
60cac7dca0Sopenharmony_ci            }
61cac7dca0Sopenharmony_ci        }};
62cac7dca0Sopenharmony_ci    }
63cac7dca0Sopenharmony_ci    pub(crate) use net::NetState;
64cac7dca0Sopenharmony_ci}
65cac7dca0Sopenharmony_ci
66cac7dca0Sopenharmony_cicfg_tcp! {
67cac7dca0Sopenharmony_ci    mod tcp;
68cac7dca0Sopenharmony_ci    pub use self::tcp::{TcpListener, TcpStream};
69cac7dca0Sopenharmony_ci}
70cac7dca0Sopenharmony_ci
71cac7dca0Sopenharmony_cicfg_udp! {
72cac7dca0Sopenharmony_ci    mod udp;
73cac7dca0Sopenharmony_ci    pub use self::udp::{UdpSocket, ConnectedUdpSocket};
74cac7dca0Sopenharmony_ci}
75