| use super::super::c; |
| use bitflags::bitflags; |
| |
| /// A type for holding raw integer socket types. |
| #[doc(hidden)] |
| pub type RawSocketType = u32; |
| |
| /// `SOCK_*` constants for use with [`socket`]. |
| /// |
| /// [`socket`]: crate::net::socket |
| #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] |
| #[repr(transparent)] |
| pub struct SocketType(pub(crate) RawSocketType); |
| |
| #[rustfmt::skip] |
| impl SocketType { |
| /// `SOCK_STREAM` |
| pub const STREAM: Self = Self(c::SOCK_STREAM); |
| |
| /// `SOCK_DGRAM` |
| pub const DGRAM: Self = Self(c::SOCK_DGRAM); |
| |
| /// `SOCK_SEQPACKET` |
| pub const SEQPACKET: Self = Self(c::SOCK_SEQPACKET); |
| |
| /// `SOCK_RAW` |
| pub const RAW: Self = Self(c::SOCK_RAW); |
| |
| /// `SOCK_RDM` |
| pub const RDM: Self = Self(c::SOCK_RDM); |
| |
| /// Constructs a `SocketType` from a raw integer. |
| #[inline] |
| pub const fn from_raw(raw: RawSocketType) -> Self { |
| Self(raw) |
| } |
| |
| /// Returns the raw integer for this `SocketType`. |
| #[inline] |
| pub const fn as_raw(self) -> RawSocketType { |
| self.0 |
| } |
| } |
| |
| /// A type for holding raw integer address families. |
| #[doc(hidden)] |
| pub type RawAddressFamily = c::sa_family_t; |
| |
| /// `AF_*` constants. |
| #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] |
| #[repr(transparent)] |
| pub struct AddressFamily(pub(crate) RawAddressFamily); |
| |
| #[rustfmt::skip] |
| impl AddressFamily { |
| /// `AF_UNSPEC` |
| pub const UNSPEC: Self = Self(c::AF_UNSPEC as _); |
| /// `AF_INET` |
| pub const INET: Self = Self(c::AF_INET as _); |
| /// `AF_INET6` |
| pub const INET6: Self = Self(c::AF_INET6 as _); |
| /// `AF_NETLINK` |
| pub const NETLINK: Self = Self(c::AF_NETLINK as _); |
| /// `AF_UNIX`, aka `AF_LOCAL` |
| #[doc(alias = "LOCAL")] |
| pub const UNIX: Self = Self(c::AF_UNIX as _); |
| /// `AF_AX25` |
| pub const AX25: Self = Self(c::AF_AX25 as _); |
| /// `AF_IPX` |
| pub const IPX: Self = Self(c::AF_IPX as _); |
| /// `AF_APPLETALK` |
| pub const APPLETALK: Self = Self(c::AF_APPLETALK as _); |
| /// `AF_NETROM` |
| pub const NETROM: Self = Self(c::AF_NETROM as _); |
| /// `AF_BRIDGE` |
| pub const BRIDGE: Self = Self(c::AF_BRIDGE as _); |
| /// `AF_ATMPVC` |
| pub const ATMPVC: Self = Self(c::AF_ATMPVC as _); |
| /// `AF_X25` |
| pub const X25: Self = Self(c::AF_X25 as _); |
| /// `AF_ROSE` |
| pub const ROSE: Self = Self(c::AF_ROSE as _); |
| /// `AF_DECnet` |
| #[allow(non_upper_case_globals)] |
| pub const DECnet: Self = Self(c::AF_DECnet as _); |
| /// `AF_NETBEUI` |
| pub const NETBEUI: Self = Self(c::AF_NETBEUI as _); |
| /// `AF_SECURITY` |
| pub const SECURITY: Self = Self(c::AF_SECURITY as _); |
| /// `AF_KEY` |
| pub const KEY: Self = Self(c::AF_KEY as _); |
| /// `AF_PACKET` |
| pub const PACKET: Self = Self(c::AF_PACKET as _); |
| /// `AF_ASH` |
| pub const ASH: Self = Self(c::AF_ASH as _); |
| /// `AF_ECONET` |
| pub const ECONET: Self = Self(c::AF_ECONET as _); |
| /// `AF_ATMSVC` |
| pub const ATMSVC: Self = Self(c::AF_ATMSVC as _); |
| /// `AF_RDS` |
| pub const RDS: Self = Self(c::AF_RDS as _); |
| /// `AF_SNA` |
| pub const SNA: Self = Self(c::AF_SNA as _); |
| /// `AF_IRDA` |
| pub const IRDA: Self = Self(c::AF_IRDA as _); |
| /// `AF_PPPOX` |
| pub const PPPOX: Self = Self(c::AF_PPPOX as _); |
| /// `AF_WANPIPE` |
| pub const WANPIPE: Self = Self(c::AF_WANPIPE as _); |
| /// `AF_LLC` |
| pub const LLC: Self = Self(c::AF_LLC as _); |
| /// `AF_CAN` |
| pub const CAN: Self = Self(c::AF_CAN as _); |
| /// `AF_TIPC` |
| pub const TIPC: Self = Self(c::AF_TIPC as _); |
| /// `AF_BLUETOOTH` |
| pub const BLUETOOTH: Self = Self(c::AF_BLUETOOTH as _); |
| /// `AF_IUCV` |
| pub const IUCV: Self = Self(c::AF_IUCV as _); |
| /// `AF_RXRPC` |
| pub const RXRPC: Self = Self(c::AF_RXRPC as _); |
| /// `AF_ISDN` |
| pub const ISDN: Self = Self(c::AF_ISDN as _); |
| /// `AF_PHONET` |
| pub const PHONET: Self = Self(c::AF_PHONET as _); |
| /// `AF_IEEE802154` |
| pub const IEEE802154: Self = Self(c::AF_IEEE802154 as _); |
| |
| /// Constructs a `AddressFamily` from a raw integer. |
| #[inline] |
| pub const fn from_raw(raw: RawAddressFamily) -> Self { |
| Self(raw) |
| } |
| |
| /// Returns the raw integer for this `AddressFamily`. |
| #[inline] |
| pub const fn as_raw(self) -> RawAddressFamily { |
| self.0 |
| } |
| } |
| |
| /// A type for holding raw integer protocols. |
| #[doc(hidden)] |
| pub type RawProtocol = u32; |
| |
| /// `IPPROTO_*` |
| #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] |
| #[repr(transparent)] |
| pub struct Protocol(pub(crate) RawProtocol); |
| |
| #[rustfmt::skip] |
| impl Protocol { |
| /// `IPPROTO_IP` |
| pub const IP: Self = Self(c::IPPROTO_IP as _); |
| /// `IPPROTO_ICMP` |
| pub const ICMP: Self = Self(c::IPPROTO_ICMP as _); |
| /// `IPPROTO_IGMP` |
| pub const IGMP: Self = Self(c::IPPROTO_IGMP as _); |
| /// `IPPROTO_IPIP` |
| pub const IPIP: Self = Self(c::IPPROTO_IPIP as _); |
| /// `IPPROTO_TCP` |
| pub const TCP: Self = Self(c::IPPROTO_TCP as _); |
| /// `IPPROTO_EGP` |
| pub const EGP: Self = Self(c::IPPROTO_EGP as _); |
| /// `IPPROTO_PUP` |
| pub const PUP: Self = Self(c::IPPROTO_PUP as _); |
| /// `IPPROTO_UDP` |
| pub const UDP: Self = Self(c::IPPROTO_UDP as _); |
| /// `IPPROTO_IDP` |
| pub const IDP: Self = Self(c::IPPROTO_IDP as _); |
| /// `IPPROTO_TP` |
| pub const TP: Self = Self(c::IPPROTO_TP as _); |
| /// `IPPROTO_DCCP` |
| pub const DCCP: Self = Self(c::IPPROTO_DCCP as _); |
| /// `IPPROTO_IPV6` |
| pub const IPV6: Self = Self(c::IPPROTO_IPV6 as _); |
| /// `IPPROTO_RSVP` |
| pub const RSVP: Self = Self(c::IPPROTO_RSVP as _); |
| /// `IPPROTO_GRE` |
| pub const GRE: Self = Self(c::IPPROTO_GRE as _); |
| /// `IPPROTO_ESP` |
| pub const ESP: Self = Self(c::IPPROTO_ESP as _); |
| /// `IPPROTO_AH` |
| pub const AH: Self = Self(c::IPPROTO_AH as _); |
| /// `IPPROTO_MTP` |
| pub const MTP: Self = Self(c::IPPROTO_MTP as _); |
| /// `IPPROTO_BEETPH` |
| pub const BEETPH: Self = Self(c::IPPROTO_BEETPH as _); |
| /// `IPPROTO_ENCAP` |
| pub const ENCAP: Self = Self(c::IPPROTO_ENCAP as _); |
| /// `IPPROTO_PIM` |
| pub const PIM: Self = Self(c::IPPROTO_PIM as _); |
| /// `IPPROTO_COMP` |
| pub const COMP: Self = Self(c::IPPROTO_COMP as _); |
| /// `IPPROTO_SCTP` |
| pub const SCTP: Self = Self(c::IPPROTO_SCTP as _); |
| /// `IPPROTO_UDPLITE` |
| pub const UDPLITE: Self = Self(c::IPPROTO_UDPLITE as _); |
| /// `IPPROTO_MPLS` |
| pub const MPLS: Self = Self(c::IPPROTO_MPLS as _); |
| /// `IPPROTO_ETHERNET` |
| pub const ETHERNET: Self = Self(c::IPPROTO_ETHERNET as _); |
| /// `IPPROTO_RAW` |
| pub const RAW: Self = Self(c::IPPROTO_RAW as _); |
| /// `IPPROTO_MPTCP` |
| pub const MPTCP: Self = Self(c::IPPROTO_MPTCP as _); |
| /// `IPPROTO_FRAGMENT` |
| pub const FRAGMENT: Self = Self(c::IPPROTO_FRAGMENT as _); |
| /// `IPPROTO_ICMPV6` |
| pub const ICMPV6: Self = Self(c::IPPROTO_ICMPV6 as _); |
| /// `IPPROTO_MH` |
| pub const MH: Self = Self(c::IPPROTO_MH as _); |
| /// `IPPROTO_ROUTING` |
| pub const ROUTING: Self = Self(c::IPPROTO_ROUTING as _); |
| |
| /// Constructs a `Protocol` from a raw integer. |
| #[inline] |
| pub const fn from_raw(raw: RawProtocol) -> Self { |
| Self(raw) |
| } |
| |
| /// Returns the raw integer for this `Protocol`. |
| #[inline] |
| pub const fn as_raw(self) -> RawProtocol { |
| self.0 |
| } |
| } |
| |
| /// `SHUT_*` constants for use with [`shutdown`]. |
| /// |
| /// [`shutdown`]: crate::net::shutdown |
| #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] |
| #[repr(u32)] |
| pub enum Shutdown { |
| /// `SHUT_WR`—Disable further read operations. |
| Read = c::SHUT_RD, |
| /// `SHUT_WR`—Disable further write operations. |
| Write = c::SHUT_WR, |
| /// `SHUT_RDWR`—Disable further read and write operations. |
| ReadWrite = c::SHUT_RDWR, |
| } |
| |
| bitflags! { |
| /// `SOCK_*` constants for use with [`accept_with`] and [`acceptfrom_with`]. |
| /// |
| /// [`accept_with`]: crate::net::accept_with |
| /// [`acceptfrom_with`]: crate::net::acceptfrom_with |
| pub struct AcceptFlags: c::c_uint { |
| /// `SOCK_NONBLOCK` |
| const NONBLOCK = c::O_NONBLOCK; |
| /// `SOCK_CLOEXEC` |
| const CLOEXEC = c::O_CLOEXEC; |
| } |
| } |
| |
| bitflags! { |
| /// `SOCK_*` constants for use with [`socket`]. |
| /// |
| /// [`socket`]: crate::net::socket |
| pub struct SocketFlags: c::c_uint { |
| /// `SOCK_NONBLOCK` |
| const NONBLOCK = c::O_NONBLOCK; |
| |
| /// `SOCK_CLOEXEC` |
| const CLOEXEC = c::O_CLOEXEC; |
| } |
| } |
| |
| /// Timeout identifier for use with [`set_socket_timeout`] and |
| /// [`get_socket_timeout`]. |
| /// |
| /// [`set_socket_timeout`]: crate::net::sockopt::set_socket_timeout. |
| /// [`get_socket_timeout`]: crate::net::sockopt::get_socket_timeout. |
| #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] |
| #[repr(u32)] |
| pub enum Timeout { |
| /// `SO_RCVTIMEO`—Timeout for receiving. |
| Recv = c::SO_RCVTIMEO_NEW, |
| |
| /// `SO_SNDTIMEO`—Timeout for sending. |
| Send = c::SO_SNDTIMEO_NEW, |
| } |