Hello,
I first time use embedded loop and maybe something I do not know,
What i do: test sends one http-request per second
But i have a problem because CPU load avarage 100%, as well as a permanent
calls poll() and gettimeofday()
if I comment on all the places where ev_io_start includes for socket a timer is
working properly.
How can I correct this situation ?
Thank you.
//test
#define host "pod.tst.eu"
#define port 80
#define HTTP_REQ_SZ 512
#define HTTP_RES_SZ 1024
int sock; // now only one socket but in the future i would like use pool sockets
ev_embed embed;
ev_io reader, writer;
ev_timer timer;
struct ev_loop *loop;
struct ev_loop *fds_loop;
char request[HTTP_REQ_SZ];
char response[HTTP_RES_SZ];
static const char * http = "GET %s HTTP/1.1\r\nHost: %s:%d\r\n\r\n";
static void read_cb (EV_P_ ev_io *w, int revents)
{
int rlen = read(w->fd, response, HTTP_REQ_SZ);
ev_io_stop (EV_A_ w);
//ev_io_start (fds_loop, &writer); // switch on in the timeer_cb()
}
static void write_cb (EV_P_ ev_io *w, int revents)
{
int len = snprintf(request, HTTP_REQ_SZ, http, "/", host, port);
int wlen = write(w->fd, request, len);
if (wlen < 0)
{
perror("write");
exit(0);
}
ev_io_stop (EV_A_ w);
ev_io_start (fds_loop, &reader);
}
static void timer_cb (EV_P_ ev_timer *w, int revents)
{
puts("tick");
ev_io_start (fds_loop, &writer);
}
int main (int argc, char* argv[])
{
init_addr(host, port);
if( !( loop = ev_default_loop(0) ) ) {
puts( "ev_default_loop() failed." );
exit(1);
}
if( !( fds_loop = ev_loop_new(EVBACKEND_KQUEUE) ) ) {
puts( "ev_default_loop() failed." );
exit(1);
}
else
{
ev_embed_init (&embed, 0, fds_loop);
ev_embed_start (loop, &embed);
}
int sock = do_connect();
setnonblock(sock);
ev_io_init (&writer, write_cb, sock, EV_WRITE);
ev_io_start (fds_loop, &writer);
ev_io_init (&reader, read_cb, sock, EV_READ);
ev_io_set (&reader, sock, EV_READ);
ev_timer_init (&timer, timer_cb, 1., 1.);
ev_timer_start (loop, &timer);
ev_loop(loop, 0);
return 0;
}
// EO Code
// truss - tracing
poll({3/POLLIN 5/POLLIN},2,957) = 1 (0x1)
gettimeofday({1239362888.409526 },0x0) = 0 (0x0)
gettimeofday({1239362888.409564 },0x0) = 0 (0x0)
.....................
poll({3/POLLIN 5/POLLIN},2,2) = 1 (0x1)
gettimeofday({1239362888.408608 },0x0) = 0 (0x0)
write(1,"tick\n",5) = 5 (0x5)
kevent(5,{0x6,EVFILT_READ,EV_DELETE,0,0x0,0x0
0x6,EVFILT_WRITE,EV_ADD,0,0x0,0x0},2,{0x6,EVFILT_WRITE,0x0,0,0x8218,0x0},64,{0.000000000
}) = 1 (0x1)
gettimeofday({1239362888.408810 },0x0) = 0 (0x0)
write(6,"GET / HTTP/1.1\r\nHost: qa.rambl"...,42) = 42 (0x2a)
kevent(5,{0x6,EVFILT_WRITE,EV_DELETE,0,0x0,0x0
0x6,EVFILT_READ,EV_ADD,0,0x0,0x0},2,{},64,{0.000000000 }) = 0 (0x0)
gettimeofday({1239362888.408971 },0x0) = 0 (0x0)
gettimeofday({1239362888.409010 },0x0) = 0 (0x0)
poll({3/POLLIN 5/POLLIN},2,957) = 1 (0x1)
gettimeofday({1239362888.409261 },0x0) = 0 (0x0)
kevent(5,{},0,{0x6,EVFILT_READ,0x0,0,0x16a,0x0},64,{0.000000000 }) = 1 (0x1)
gettimeofday({1239362888.409358 },0x0) = 0 (0x0)
read(6,"HTTP/1.1 200 OK\r\nServer: nginx"...,512) = 362 (0x16a)
gettimeofday({1239362888.409441 },0x0) = 0 (0x0)
poll({3/POLLIN 5/POLLIN},2,957) = 1 (0x1)
gettimeofday({1239362888.409526 },0x0) = 0 (0x0)
gettimeofday({1239362888.409564 },0x0) = 0 (0x0)
............................................
poll({3/POLLIN 5/POLLIN},2,957) = 1 (0x1)
gettimeofday({1239362888.409526 },0x0) = 0 (0x0)
gettimeofday({1239362888.409564 },0x0) = 0 (0x0)
_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev