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