use polling::{Event, Poller};
use std::fmt;
use std::io::Result;
use std::os::windows::io::{AsRawSocket, BorrowedSocket, RawSocket};
#[doc(hidden)]
pub struct Registration {
raw: RawSocket,
}
unsafe impl Send for Registration {}
unsafe impl Sync for Registration {}
impl fmt::Debug for Registration {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt::Debug::fmt(&self.raw, f)
}
}
impl Registration {
pub(crate) unsafe fn new(f: BorrowedSocket<'_>) -> Self {
Self {
raw: f.as_raw_socket(),
}
}
#[inline]
pub(crate) fn add(&self, poller: &Poller, token: usize) -> Result<()> {
unsafe { poller.add(self.raw, Event::none(token)) }
}
#[inline]
pub(crate) fn modify(&self, poller: &Poller, interest: Event) -> Result<()> {
let fd = unsafe { BorrowedSocket::borrow_raw(self.raw) };
poller.modify(fd, interest)
}
#[inline]
pub(crate) fn delete(&self, poller: &Poller) -> Result<()> {
let fd = unsafe { BorrowedSocket::borrow_raw(self.raw) };
poller.delete(fd)
}
}