15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Compile with:
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_CONFIG_H
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "config.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef WIN32
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <winsock2.h>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/stat.h>
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_TIME_H
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/time.h>
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_SYS_SOCKET_H
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/socket.h>
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h>
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <signal.h>
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_UNISTD_H
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <unistd.h>
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <errno.h>
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <event.h>
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <evutil.h>
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int pair[2];
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int test_okay = 1;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int called = 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)write_cb(int fd, short event, void *arg)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	const char *test = "test string";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	int len;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	len = send(fd, test, strlen(test) + 1, 0);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	printf("%s: write %d%s\n", __func__,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    len, len ? "" : " - means EOF");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (len > 0) {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		if (!called)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			event_add(arg, NULL);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		EVUTIL_CLOSESOCKET(pair[0]);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	} else if (called == 1)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		test_okay = 0;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	called++;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)main (int argc, char **argv)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	struct event ev;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef WIN32
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		return (1);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		return (1);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/* Initalize the event library */
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_init();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	/* Initalize one event */
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_set(&ev, pair[1], EV_WRITE, write_cb, &ev);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_add(&ev, NULL);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	event_dispatch();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return (test_okay);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85