Hello.
How to change watched events? For example I want to implement POP3-like 
protocol. Accepted socket must watch EV_READ for command and EV _WRITE for
reply. So I need change watched events on every state of conversation in his 
callback.  Something like
void my_sock_cb (ev_io *sock, int what)
{
         my_ev_io  *my = (my_ev_io *)sock;
         if (what & EV_ERROR)
         {
                /* close connection */
                 return;
         }
         if (what & EV_READ)
        {
  /* read and process client's command */
               read (sock->fd, buf, my->buf_size);
               ....
               strcpy (my->buf, "OK\n");
                my->len = strlen (buf);
               ev_io_set (&sock, EV_WRITE);
        }
        if (what & EV_WRITE)
        {
               write (sock->fd, my->buf, my->len);
                .....
/*         switch to READING next command */
            ev_io_set (&sock, EV_READ);
        }
        ev_io_start (ev_default_loop (0), &sock);
        return;
}
....
my_ev_io *data;
....
       fd = accept (...);
      ev_io_init ((ev_io *)data,  my_io_cb, fd, EV_READ);
      ev_io_start (ev_default_loop (0), (ev_io *)data);

Is it correct?

_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to