1*5f15e431Snicm /*
2*5f15e431Snicm * Compile with:
3*5f15e431Snicm * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent
4*5f15e431Snicm */
5*5f15e431Snicm #ifdef HAVE_CONFIG_H
6*5f15e431Snicm #include "config.h"
7*5f15e431Snicm #endif
8*5f15e431Snicm
9*5f15e431Snicm
10*5f15e431Snicm #ifdef WIN32
11*5f15e431Snicm #include <winsock2.h>
12*5f15e431Snicm #endif
13*5f15e431Snicm #include <sys/types.h>
14*5f15e431Snicm #include <sys/stat.h>
15*5f15e431Snicm #ifdef HAVE_SYS_TIME_H
16*5f15e431Snicm #include <sys/time.h>
17*5f15e431Snicm #endif
18*5f15e431Snicm #ifdef HAVE_SYS_SOCKET_H
19*5f15e431Snicm #include <sys/socket.h>
20*5f15e431Snicm #endif
21*5f15e431Snicm #include <fcntl.h>
22*5f15e431Snicm #include <stdlib.h>
23*5f15e431Snicm #include <stdio.h>
24*5f15e431Snicm #include <string.h>
25*5f15e431Snicm #include <signal.h>
26*5f15e431Snicm #ifdef HAVE_UNISTD_H
27*5f15e431Snicm #include <unistd.h>
28*5f15e431Snicm #endif
29*5f15e431Snicm #include <errno.h>
30*5f15e431Snicm
31*5f15e431Snicm #include <event.h>
32*5f15e431Snicm #include <evutil.h>
33*5f15e431Snicm
34*5f15e431Snicm int pair[2];
35*5f15e431Snicm int test_okay = 1;
36*5f15e431Snicm int called = 0;
37*5f15e431Snicm
38*5f15e431Snicm static void
write_cb(int fd,short event,void * arg)39*5f15e431Snicm write_cb(int fd, short event, void *arg)
40*5f15e431Snicm {
41*5f15e431Snicm const char *test = "test string";
42*5f15e431Snicm int len;
43*5f15e431Snicm
44*5f15e431Snicm len = send(fd, test, strlen(test) + 1, 0);
45*5f15e431Snicm
46*5f15e431Snicm printf("%s: write %d%s\n", __func__,
47*5f15e431Snicm len, len ? "" : " - means EOF");
48*5f15e431Snicm
49*5f15e431Snicm if (len > 0) {
50*5f15e431Snicm if (!called)
51*5f15e431Snicm event_add(arg, NULL);
52*5f15e431Snicm EVUTIL_CLOSESOCKET(pair[0]);
53*5f15e431Snicm } else if (called == 1)
54*5f15e431Snicm test_okay = 0;
55*5f15e431Snicm
56*5f15e431Snicm called++;
57*5f15e431Snicm }
58*5f15e431Snicm
59*5f15e431Snicm int
main(int argc,char ** argv)60*5f15e431Snicm main (int argc, char **argv)
61*5f15e431Snicm {
62*5f15e431Snicm struct event ev;
63*5f15e431Snicm
64*5f15e431Snicm #ifndef WIN32
65*5f15e431Snicm if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
66*5f15e431Snicm return (1);
67*5f15e431Snicm #endif
68*5f15e431Snicm
69*5f15e431Snicm if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
70*5f15e431Snicm return (1);
71*5f15e431Snicm
72*5f15e431Snicm /* Initalize the event library */
73*5f15e431Snicm event_init();
74*5f15e431Snicm
75*5f15e431Snicm /* Initalize one event */
76*5f15e431Snicm event_set(&ev, pair[1], EV_WRITE, write_cb, &ev);
77*5f15e431Snicm
78*5f15e431Snicm event_add(&ev, NULL);
79*5f15e431Snicm
80*5f15e431Snicm event_dispatch();
81*5f15e431Snicm
82*5f15e431Snicm return (test_okay);
83*5f15e431Snicm }
84*5f15e431Snicm
85