@@ -122,11 +122,11 @@ - (BOOL)observeWithTimeout: (double)timeout { void *pool = objc_autoreleasePoolPush(); struct pollfd *FDsCArray; - size_t i, nFDs; + size_t i, nFDs, realEvents = 0; [self _processQueue]; if ([self _processCache]) { objc_autoreleasePoolPop(pool); @@ -159,27 +159,33 @@ objc_autoreleasePoolPop(pool); continue; } + realEvents++; [delegate streamIsReadyForReading: FDToStream[FDsCArray[i].fd]]; } if (FDsCArray[i].revents & POLLOUT) { + realEvents++; [delegate streamIsReadyForWriting: FDToStream[FDsCArray[i].fd]]; } if (FDsCArray[i].revents & POLLERR) { + realEvents++; [delegate streamDidReceiveException: FDToStream[FDsCArray[i].fd]]; } FDsCArray[i].revents = 0; objc_autoreleasePoolPop(pool); } + + if (realEvents == 0) + return NO; return YES; } @end