[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[Libevent-users] epoll fd in libevent



Hallo libevent developers,

I want to monitor GPIO lines under Linux and I'm using libevent. As I understand, for portability issues, it is not possible to monitor GPIOs with libevent because the "exception" event is not cross platform.

I saw in a thread of the libevent mailing list that it would be possible to create an epoll and register the file descriptor in libevent: 
http://archives.seul.org/libevent/users/Apr-2012/msg00026.html

I tried this solution but the problem is that I only get the "POLLPRI" event once at startup, despite I register the epoll fd in libevent with "EV_READ | EV_PERSIST".

Some code talks more than too many explanation, here is how I register the GPIO in epoll:
int EPollEventLoop::addExceptionHandler(libds::IIoHandler& handler)
{
    struct epoll_event event;

    // Init must be called
    assert(m_epollFd >= 0);

    // Add to epoll
    event.data.fd = handler.getIoHandle();
    event.events = EPOLLPRI;    
    if (epoll_ctl(m_epollFd, EPOLL_CTL_ADD, handler.getIoHandle(), &event) != 0)
    {
        ILog_msg(NULL, LOG_LEVEL_ERR, "Cannot add event to epoll %s", strerror(errno));
        return -1;
    }

    return 0;
}

I'm wondering if this solution is supposed to work or if I'm missing something like edge/level triggered. Anyone could achieve this?

Kind regards,

Guy Morand
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.