Browse Source

*** empty log message ***

Marc Alexander Lehmann 12 years ago
3 changed files with 19 additions and 0 deletions
  1. +3
  2. +7
  3. +9

+ 3
- 0
Changes View File

@ -1,5 +1,8 @@
Revision history for libev, a high-performance and full-featured event loop.
- pass in the write fd set as except fd set under windows. windows
is so uncontrollably lame that it requires this.
3.41 Fri May 23 18:42:54 CEST 2008
- work around an (undocumented) bug in winsocket select: if you
provide only empty fd sets then select returns WSAEINVAL. how sucky.

+ 7
- 0
ev.pod View File

@ -3304,6 +3304,13 @@ way (note also that glib is the slowest event library known to man).
There is no supported compilation method available on windows except
embedding it into other applications.
Not a libev limitation but worth mentioning: windows apparently doesn't
accept large writes: instead of resulting in a partial write, windows will
either accept everything or return C<ENOBUFS> if the buffer is too large,
so make sure you only write small amounts into your sockets (less than a
megabyte seems safe, but thsi apparently depends on the amount of memory
Due to the many, low, and arbitrary limits on the win32 platform and
the abysmal performance of winsockets, using a large number of sockets
is not recommended (and not reasonable). If your program needs to use

+ 9
- 0
ev_select.c View File

@ -134,7 +134,16 @@ select_poll (EV_P_ ev_tstamp timeout)
tv.tv_sec = (long)timeout;
tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6);
#ifdef _WIN32
/* pass in the write set as except set.
* the idea behind this is to work around a windows bug that causes
* errors to be reported as an exception and not by setting
* the writable bit. this is so uncontrollably lame.
res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, (fd_set *)vec_wo, &tv);
res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, 0, &tv);
if (expect_false (res < 0))