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