rust_asio 0.6.0

Asynchronous I/O library
Documentation
use core::{Reactor, IntrFd};
use ffi::write;

use std::io;
use libc::{eventfd, EFD_CLOEXEC, EFD_NONBLOCK};

pub struct EventFdInterrupter {
    efd: IntrFd,
}

impl EventFdInterrupter {
    pub fn new() -> io::Result<Self> {
        let efd = libc_try!(eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK));
        Ok(EventFdInterrupter {
            efd: IntrFd::new::<Self>(efd),
        })
    }

    pub fn startup(&self, ctx: &Reactor) {
        ctx.register_intr_fd(&self.efd)
    }

    pub fn cleanup(&self, ctx: &Reactor) {
        ctx.deregister_intr_fd(&self.efd)
    }

    pub fn interrupt(&self) {
        let buf = [1,0,0,0,0,0,0,0];
        libc_ign!(write(&self.efd, &buf));
    }
}