]> git.llucax.com Git - software/eventxx.git/blob - test/test-weof.cpp
tagged 0.3
[software/eventxx.git] / test / test-weof.cpp
1 /*
2  * Compile with:
3  * c++ -I/usr/local/include -o time-test time-test.cpp -L/usr/local/lib -levent
4  *
5  * Wed 2006-12-27 - Modified by Leandro Lucarella <llucax+eventxx@gmail.com>
6  *
7  *     Adapted to test the C++ inteface.
8  *
9  */
10
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 #include <sys/time.h>
14 #include <sys/socket.h>
15 #include <fcntl.h>
16 #include <unistd.h>
17 #include <cstdlib>
18 #include <cstdio>
19 #include <cstring>
20 #include <csignal>
21 #include <cerrno>
22
23 #include <eventxx>
24
25 typedef void (cb_t)(int, short);
26
27 int pair[2];
28 int test_okay = 1;
29 int called = 0;
30 eventxx::dispatcher d;
31 eventxx::event< cb_t >* ev;
32
33 void
34 write_cb(int fd, short event)
35 {
36         char *test = "test string";
37         int len;
38
39         len = write(fd, test, strlen(test) + 1);
40
41         printf("%s: write %d%s\n", __func__,
42             len, len ? "" : " - means EOF");
43
44         if (len > 0) {
45                 if (!called)
46                         d.add(*ev);
47                 close(pair[0]);
48         } else if (called == 1)
49                 test_okay = 0;
50
51         called++;
52 }
53
54 int
55 main (int argc, char **argv)
56 {
57         if (signal(SIGPIPE, SIG_IGN) == SIG_IGN)
58                 return (1);
59
60         if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
61                 return (1);
62
63         /* Initalize one event */
64         ev = new eventxx::event< cb_t >(pair[1], eventxx::WRITE, write_cb);
65
66         d.add(*ev);
67
68         d.dispatch();
69
70         delete ev;
71
72         return (test_okay);
73 }
74