summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2012-05-06 19:29:59 +0000
committerroot <root>2012-05-06 19:29:59 +0000
commit2de9ecb7221f0bfe6db88a6b30104bea82c6ceac (patch)
treeebe278bc805941f70909d7d2c3b48bc0d030d0b8
parentb2ea4853acbd7194535e1827839cf4d35a274c9a (diff)
*** empty log message ***
-rw-r--r--Changes1
-rw-r--r--ev.c28
-rw-r--r--ev.pod7
3 files changed, 26 insertions, 10 deletions
diff --git a/Changes b/Changes
index 9f3bf5d..0852663 100644
--- a/Changes
+++ b/Changes
@@ -29,6 +29,7 @@ TODO: faq, process a thing in each iteration
- include sys/syscall.h instead of plain syscall.h.
- check for io watcher loops in ev_verify, check for the most
common reported usage bug in ev_io_start.
+ - chose socket vs. WSASocket at compiletime using EV_USE_WSASOCKET.
4.11 Sat Feb 4 19:52:39 CET 2012
- INCOMPATIBLE CHANGE: ev_timer_again now clears the pending status, as
diff --git a/ev.c b/ev.c
index c2720a7..fe7cfa7 100644
--- a/ev.c
+++ b/ev.c
@@ -1878,14 +1878,15 @@ evpipe_write (EV_P_ EV_ATOMIC_T *flag)
else
#endif
{
- /* win32 people keep sending patches that change this write() to send() */
- /* and then run away. but send() is wrong, it wants a socket handle on win32 */
- /* so when you think this write should be a send instead, please find out */
- /* where your send() is from - it's definitely not the microsoft send, and */
- /* tell me. thank you. */
- /* it might be that your problem is that your environment needs EV_USE_WSASOCKET */
- /* check the ev documentation on how to use this flag */
+#ifdef _WIN32
+ WSABUF buf;
+ DWORD sent;
+ buf.buf = &buf;
+ buf.len = 1;
+ WSASend (EV_FD_TO_WIN32_HANDLE (evpipe [1]), &buf, 1, &sent, 0, 0, 0);
+#else
write (evpipe [1], &(evpipe [1]), 1);
+#endif
}
errno = old_errno;
@@ -1910,9 +1911,16 @@ pipecb (EV_P_ ev_io *iow, int revents)
else
#endif
{
- char dummy;
- /* see discussion in evpipe_write when you think this read should be recv in win32 */
- read (evpipe [0], &dummy, 1);
+ char dummy[4];
+#ifdef _WIN32
+ WSABUF buf;
+ DWORD recvd;
+ buf.buf = dummy;
+ buf.len = sizeof (dummy);
+ WSARecv (EV_FD_TO_WIN32_HANDLE (evpipe [0]), &buf, 1, &recvd, 0, 0, 0);
+#else
+ read (evpipe [0], &dummy, sizeof (dummy));
+#endif
}
}
diff --git a/ev.pod b/ev.pod
index 784a2fa..70c5f0a 100644
--- a/ev.pod
+++ b/ev.pod
@@ -4556,6 +4556,13 @@ macro can be used to override the C<close> function, useful to unregister
file descriptors again. Note that the replacement function has to close
the underlying OS handle.
+=item EV_USE_WSASOCKET
+
+If defined to be C<1>, libev will use C<WSASocket> to create its internal
+communication socket, which works better in some environments. Otherwise,
+the normal C<socket> function will be used, which works better in other
+enviornments.
+
=item EV_USE_POLL
If defined to be C<1>, libev will compile in support for the C<poll>(2)