[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] event_add fails with ENOENT when on epoll
On Mon, Apr 19, 2010 at 11:24 PM, Denis Bilenko <denis.bilenko@xxxxxxxxx> wrote:
> Hi,
>
> I've run into an issue where event_add() fails with ENOENT.
> This happens when a socket reuses a descriptor that was recently
> closed and was used before with another event.
>
> The details are below. The question I have is - what are the ways to
> work around this?
>
You must never modify an event that is currently pending. If you want
to reassign it, you need to call event_del(), then modify it, then
call event_add().
For some backends (like epoll and kqueue) you need to call event_del()
on the event when you close the socket, and then event_add() again,
even if the fd didn't change: as far as the kernel is concerned, it is
no longer interested in tracking fd, once the socket has closed.
--
Nick
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.