diff options
| -rw-r--r-- | ev.c | 37 | 
1 files changed, 26 insertions, 11 deletions
@@ -976,6 +976,31 @@ fd_reify (EV_P)  {    int i; +#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP +  for (i = 0; i < fdchangecnt; ++i) +    { +      int fd = fdchanges [i]; +      ANFD *anfd = anfds + fd; + +      if (anfd->reify & EV__IOFDSET) +        { +          SOCKET handle = EV_FD_TO_WIN32_HANDLE (fd); + +          if (handle != anfd->handle) +            { +              unsigned long arg; + +              assert (("libev: only socket fds supported in this configuration", ioctlsocket (handle, FIONREAD, &arg) == 0)); + +              /* handle changed, but fd didn't - we need to do it in two steps */ +              backend_modify (EV_A_ fd, anfd->events, 0); +              anfd->events = 0; +              anfd->handle = handle; +            } +        } +    } +#endif +    for (i = 0; i < fdchangecnt; ++i)      {        int fd = fdchanges [i]; @@ -987,16 +1012,6 @@ fd_reify (EV_P)        anfd->reify  = 0; -#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP -      if (o_reify & EV__IOFDSET) -        { -          unsigned long arg; -          anfd->handle = EV_FD_TO_WIN32_HANDLE (fd); -          assert (("libev: only socket fds supported in this configuration", ioctlsocket (anfd->handle, FIONREAD, &arg) == 0)); -          printf ("oi %d %x\n", fd, anfd->handle);//D -        } -#endif -        /*if (expect_true (o_reify & EV_ANFD_REIFY)) probably a deoptimisation */          {            anfd->events = 0; @@ -2195,7 +2210,7 @@ timers_reify (EV_P)  #if EV_PERIODIC_ENABLE -inline_speed +inline_speed void  periodic_recalc (EV_P_ ev_periodic *w)  {    /* TODO: use slow but potentially more correct incremental algo, */  | 
