237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
- (BOOL)observeWithTimeout: (int)timeout
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
BOOL foundInCache = NO;
OFStream **cArray;
size_t i, count;
#ifdef OF_HAVE_POLL
struct pollfd *fds_c = [fds cArray];
/*
* There is no way to find out the maximum number of fds, so we just
* cast.
*/
nfds_t nfds = (nfds_t)[fds count];
#else
fd_set readfds_;
fd_set writefds_;
fd_set exceptfds_;
struct timeval tv;
#endif
|
|
<
<
<
<
|
|
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
|
- (BOOL)observeWithTimeout: (int)timeout
{
OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
BOOL foundInCache = NO;
OFStream **cArray;
size_t i, count;
#ifdef OF_HAVE_POLL
struct pollfd *fds_c;
nfds_t nfds;
#else
fd_set readfds_;
fd_set writefds_;
fd_set exceptfds_;
struct timeval tv;
#endif
|
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
|
* As long as we have data in the cache for any stream, we don't want
* to block.
*/
if (foundInCache)
return YES;
#ifdef OF_HAVE_POLL
if (poll(fds_c, nfds, timeout) < 1)
return NO;
for (i = 0; i < nfds; i++) {
OFNumber *num;
OFStream *stream;
if (fds_c[i].revents & POLLIN) {
|
>
>
>
>
>
>
|
|
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
* As long as we have data in the cache for any stream, we don't want
* to block.
*/
if (foundInCache)
return YES;
#ifdef OF_HAVE_POLL
fds_c = [fds cArray];
nfds = [fds count];
if (nfds > OPEN_MAX)
@throw [OFOutOfRangeException newWithClass: isa];
if (poll(fds_c, (nfds_t)nfds, timeout) < 1)
return NO;
for (i = 0; i < nfds; i++) {
OFNumber *num;
OFStream *stream;
if (fds_c[i].revents & POLLIN) {
|