This is Fdset.m in view mode; [Download] [Up]
#import "Fdset.h" #import <libc.h> @implementation Fdset + new { self = [super new]; FD_ZERO(&fds); FD_ZERO(&ready_fds); nfds = 0; return self; } - addfd:(int)thisfd { FD_SET(thisfd,&fds); if (thisfd+1 > nfds) nfds = thisfd+1; return self; } - (BOOL) isfdReady:(int)thisfd // returns YES if given descriptor is ready { return (FD_ISSET(thisfd,&ready_fds)); } - (int) waitOnInputForever // returns number of file descriptors which are ready { int nfound; ready_fds = fds; nfound = select(nfds, &ready_fds, 0,0,0); return (nfound); } - (int) waitOnInputFor:(int)seconds //waits no more than number of seconds { int nfound; struct timeval timeout; timeout.tv_usec = 0; timeout.tv_sec = seconds; ready_fds = fds; nfound = select(nfds, &ready_fds, 0,0, &timeout); return (nfound); } - (int) waitOnInputFor:(int)seconds :(int)microseconds // for fractional timeouts { int nfound; struct timeval timeout; timeout.tv_usec = microseconds; timeout.tv_sec = seconds; ready_fds = fds; nfound = select(nfds, &ready_fds, 0,0, &timeout); return (nfound); } - (int) getReadyfd //returns one of the ready file descriptors, marks it unready { int fd; for (fd=0; fd<nfds; fd++) if (FD_ISSET(fd,&ready_fds)) { FD_CLR(fd,&ready_fds); return fd; } return (-1); } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.