[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] Enable/disable write callback for UDP
On Sat, Apr 20, 2013 at 3:36 PM, Jan Danielsson
<jan.m.danielsson@xxxxxxxxx> wrote:
> Hello,
>
> I'm doing this (roughly):
>
> ---------------
> udp_sock = create_udo4_any_socket("7777");
> evutil_make_socket_nonblocking(udp_sock);
> udp_event = event_new(base, udp_sock, EV_READ|EV_WRITE|EV_PERSIST,
> proc_udp_packet, (void*)base);
> event_add(udp_event, NULL);
> ---------------
>
> But I want to disable, and later re-enable, EV_WRITE in the callback
> function (well, in other functions as well, but I'm guessing the method
> would be the same regardless). How is this done?
The easiest approach is to construct two separate events: one with
EV_WRITE and one with EV_READ, and then use event_del() to disable the
write event and event_add() to re-enable it again.
You can also use event_assign() to change the setup of the event,
replacing EV_READ|EV_WRITE with EV_READ, but you need to be careful:
it is illegal (and will cause undefined behavior) to call
event_assign() on a currently pending or active event. So you would
need to event_del() the event, event_assign() it, and event_add() it
again.
There are probably other good approaches too.
best wishes,
--
Nick
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.