11//! Solaris/illumos event ports.
2+ //!
3+ //! # Examples
4+ //!
5+ //! ```
6+ //! # fn test() -> std::io::Result<()> {
7+ //! use rustix::event::port;
8+ //! use rustix::stdio::stdout;
9+ //! use std::io;
10+ //!
11+ //! let some_fd = stdout();
12+ //! let some_userdata = 7 as *mut _;
13+ //!
14+ //! // Create a port.
15+ //! let port = port::create()?;
16+ //!
17+ //! // Associate `some_fd` with the port.
18+ //! unsafe {
19+ //! port::associate_fd(&port, some_fd, port::PollFlags::IN, some_userdata)?;
20+ //! }
21+ //!
22+ //! // Get a single event.
23+ //! let event = port::get(&port, None)?;
24+ //!
25+ //! assert_eq!(event.userdata(), some_userdata);
26+ //! # Ok(())
27+ //! # }
28+ //! ```
229
330use crate :: backend:: c;
431use crate :: backend:: event:: syscalls;
532use crate :: fd:: { AsFd , AsRawFd , OwnedFd } ;
633use crate :: ffi;
734use crate :: io;
835
9- use super :: PollFlags ;
10-
1136use core:: time:: Duration ;
1237
38+ pub use super :: PollFlags ;
39+
1340/// The structure representing a port event.
1441#[ repr( transparent) ]
42+ #[ doc( alias = "port_event" ) ]
1543pub struct Event ( pub ( crate ) c:: port_event ) ;
1644
1745impl Event {
@@ -39,7 +67,8 @@ impl Event {
3967///
4068/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_create/
4169/// [illumos]: https://illumos.org/man/3C/port_create
42- pub fn port_create ( ) -> io:: Result < OwnedFd > {
70+ #[ doc( alias = "port_create" ) ]
71+ pub fn create ( ) -> io:: Result < OwnedFd > {
4372 syscalls:: port_create ( )
4473}
4574
@@ -50,15 +79,16 @@ pub fn port_create() -> io::Result<OwnedFd> {
5079///
5180/// Any `object`s passed into the `port` must be valid for the lifetime of the
5281/// `port`. Logically, `port` keeps a borrowed reference to the `object` until
53- /// it is removed via `port_dissociate_fd` .
82+ /// it is removed via [`dissociate_fd`] .
5483///
5584/// # References
5685/// - [OpenSolaris]
5786/// - [illumos]
5887///
5988/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_associate/
6089/// [illumos]: https://illumos.org/man/3C/port_associate
61- pub unsafe fn port_associate_fd < Fd : AsFd , RawFd : AsRawFd > (
90+ #[ doc( alias = "port_associate" ) ]
91+ pub unsafe fn associate_fd < Fd : AsFd , RawFd : AsRawFd > (
6292 port : Fd ,
6393 object : RawFd ,
6494 events : PollFlags ,
@@ -79,18 +109,16 @@ pub unsafe fn port_associate_fd<Fd: AsFd, RawFd: AsRawFd>(
79109/// # Safety
80110///
81111/// The file descriptor passed into this function must have been previously
82- /// associated with the port via [`port_associate_fd `].
112+ /// associated with the port via [`associate_fd `].
83113///
84114/// # References
85115/// - [OpenSolaris]
86116/// - [illumos]
87117///
88118/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_dissociate
89119/// [illumos]: https://illumos.org/man/3C/port_dissociate
90- pub unsafe fn port_dissociate_fd < Fd : AsFd , RawFd : AsRawFd > (
91- port : Fd ,
92- object : RawFd ,
93- ) -> io:: Result < ( ) > {
120+ #[ doc( alias = "port_dissociate" ) ]
121+ pub unsafe fn dissociate_fd < Fd : AsFd , RawFd : AsRawFd > ( port : Fd , object : RawFd ) -> io:: Result < ( ) > {
94122 syscalls:: port_dissociate ( port. as_fd ( ) , c:: PORT_SOURCE_FD , object. as_raw_fd ( ) as _ )
95123}
96124
@@ -102,7 +130,8 @@ pub unsafe fn port_dissociate_fd<Fd: AsFd, RawFd: AsRawFd>(
102130///
103131/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_get/
104132/// [illumos]: https://illumos.org/man/3C/port_get
105- pub fn port_get < Fd : AsFd > ( port : Fd , timeout : Option < Duration > ) -> io:: Result < Event > {
133+ #[ doc( alias = "port_get" ) ]
134+ pub fn get < Fd : AsFd > ( port : Fd , timeout : Option < Duration > ) -> io:: Result < Event > {
106135 let mut timeout = timeout. map ( |timeout| c:: timespec {
107136 tv_sec : timeout. as_secs ( ) . try_into ( ) . unwrap ( ) ,
108137 tv_nsec : timeout. subsec_nanos ( ) as _ ,
@@ -119,7 +148,7 @@ pub fn port_get<Fd: AsFd>(port: Fd, timeout: Option<Duration>) -> io::Result<Eve
119148/// this does nothing and returns immediately.
120149///
121150/// To query the number of events without retrieving any, use
122- /// [`port_getn_query `].
151+ /// [`getn_query `].
123152///
124153/// # References
125154/// - [OpenSolaris]
@@ -128,7 +157,8 @@ pub fn port_get<Fd: AsFd>(port: Fd, timeout: Option<Duration>) -> io::Result<Eve
128157/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_getn/
129158/// [illumos]: https://illumos.org/man/3C/port_getn
130159#[ cfg( feature = "alloc" ) ]
131- pub fn port_getn < Fd : AsFd > (
160+ #[ doc( alias = "port_getn" ) ]
161+ pub fn getn < Fd : AsFd > (
132162 port : Fd ,
133163 events : & mut Vec < Event > ,
134164 min_events : usize ,
@@ -152,15 +182,16 @@ pub fn port_getn<Fd: AsFd>(
152182/// `port_getn(port, NULL, 0, NULL)`—Queries the number of events
153183/// available from a port.
154184///
155- /// To retrieve the events, use [`port_getn `].
185+ /// To retrieve the events, use [`getn `].
156186///
157187/// # References
158188/// - [OpenSolaris]
159189/// - [illumos]
160190///
161191/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_getn/
162192/// [illumos]: https://illumos.org/man/3C/port_getn
163- pub fn port_getn_query < Fd : AsFd > ( port : Fd ) -> io:: Result < u32 > {
193+ #[ doc( alias = "port_getn" ) ]
194+ pub fn getn_query < Fd : AsFd > ( port : Fd ) -> io:: Result < u32 > {
164195 syscalls:: port_getn_query ( port. as_fd ( ) )
165196}
166197
@@ -172,6 +203,7 @@ pub fn port_getn_query<Fd: AsFd>(port: Fd) -> io::Result<u32> {
172203///
173204/// [OpenSolaris]: https://www.unix.com/man-page/opensolaris/3C/port_send/
174205/// [illumos]: https://illumos.org/man/3C/port_send
175- pub fn port_send < Fd : AsFd > ( port : Fd , events : i32 , userdata : * mut ffi:: c_void ) -> io:: Result < ( ) > {
206+ #[ doc( alias = "port_send" ) ]
207+ pub fn send < Fd : AsFd > ( port : Fd , events : i32 , userdata : * mut ffi:: c_void ) -> io:: Result < ( ) > {
176208 syscalls:: port_send ( port. as_fd ( ) , events, userdata. cast ( ) )
177209}
0 commit comments