[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r10617: Minor debugging work - read/write don't work on socketpairs (in libevent-urz/trunk: . WIN32-Code)
Author: Urz
Date: 2007-06-16 07:58:23 -0400 (Sat, 16 Jun 2007)
New Revision: 10617
Modified:
libevent-urz/trunk/WIN32-Code/win32.c
libevent-urz/trunk/sa_evbuffer.c
Log:
Minor debugging work - read/write don't work on socketpairs on windows, so macros now make this platform agnostic. The first delayed callback works, subsequent do not. I may not be using EV_PERSIST correctly.
Modified: libevent-urz/trunk/WIN32-Code/win32.c
===================================================================
--- libevent-urz/trunk/WIN32-Code/win32.c 2007-06-16 10:31:14 UTC (rev 10616)
+++ libevent-urz/trunk/WIN32-Code/win32.c 2007-06-16 11:58:23 UTC (rev 10617)
@@ -299,7 +299,7 @@
memcpy(out->fd_array, in->fd_array, in->fd_count * (sizeof(SOCKET)));
}
-/*
+
static void dump_fd_set(struct win_fd_set *s)
{
unsigned int i;
@@ -308,8 +308,8 @@
printf("%d ",(int)s->fd_array[i]);
printf("]\n");
}
-*/
+
int
win32_dispatch(struct event_base *base, void *op,
struct timeval *tv)
@@ -329,17 +329,26 @@
if (!fd_count) {
/* Windows doesn't like you to call select() with no sockets */
+ event_debug(("%s: fd_count == 0", __func__));
Sleep(timeval_to_ms(tv));
signal_process();
return (0);
}
+ dump_fd_set(win32op->readset_out);
+ dump_fd_set(win32op->writeset_out);
+ dump_fd_set(win32op->exset_out);
+ event_debug(("%s: tv == %x\n", __func__, res));
+
res = select(fd_count,
(struct fd_set*)win32op->readset_out,
(struct fd_set*)win32op->writeset_out,
(struct fd_set*)win32op->exset_out, tv);
event_debug(("%s: select returned %d", __func__, res));
+ if(res == SOCKET_ERROR) {
+ event_debug(("Socket error found\n"));
+ }
if(res <= 0) {
signal_process();
Modified: libevent-urz/trunk/sa_evbuffer.c
===================================================================
--- libevent-urz/trunk/sa_evbuffer.c 2007-06-16 10:31:14 UTC (rev 10616)
+++ libevent-urz/trunk/sa_evbuffer.c 2007-06-16 11:58:23 UTC (rev 10617)
@@ -56,7 +56,12 @@
#include <windows.h>
#include <process.h>
#include "WIN32-Code/misc.h"
+#define pipe_write(pipe, data, len) send((pipe), (data), (len), 0)
+#define pipe_read(pipe, data, len) recv((pipe), (data), (len), 0)
#undef WIN32_LEAN_AND_MEAN
+#else
+#define pipe_write(pipe, data, len) write((pipe), (data), (len))
+#define pipe_read(pipe, data, len) read((pipe), (data), (len))
#endif
#include "event.h"
@@ -76,7 +81,7 @@
printf("Notify Called\n");
if(del_notifier_status == NOTIFIER_READY) {
printf("Notifying\n");
- write(del_notifier[EVBUFFER_END], ".", 1);
+ printf("Notify: write returned %d\n", pipe_write(del_notifier[EVBUFFER_END], ".", 1));
del_notifier_status = NOTIFIER_PENDING;
}
}
@@ -90,7 +95,7 @@
printf("Delayed Callback Called\n");
/* Read data out of socketpair */
- readlen = read(fd, &readdata, 1);
+ readlen = pipe_read(fd, &readdata, 1);
/* Set notifier status back to ready */
del_notifier_status = NOTIFIER_READY;