úÎ3Ü0Õ&      !"#$%None&'()&'()&'()None *+,-./012345 *+,-./012345 *+,-./012345None  Create an FdSet' from a list of file descriptors. File < descriptors not in range (see above) are silently ignored. Insert a file descriptor. >Insert multiple file descriptors. This is more efficient than  multiple +s (only a single copy of the set is made).  An empty FdSet. ATest for membership. Recall that POSIX allows undefined behavior E if the file descriptor is not valid (it does, however, seem to work  fine on Linux). Remove a file descriptor. >Remove multiple file descriptors. This is more efficient than  multiple +s (only a single copy of the set is made).  fds fdset) gives a list of all file descriptors in  fd that are in fdset. :Test if a file descriptor is in range (see introduction). @This file descriptor is at least as large as the largest in the B set. If no file descriptors have ever been removed from the set,  the value is  the largest) in the set, but this assumption may not * hold after removals or other operations. Copy an FdSet.     NoneThis converts an FdSet! to a list by testing every file D descriptor in range for membership, which tends to involve invalid E file descriptors, giving undefined behavior according to POSIX. Use   if possible.     None$Abstraction for the return value of select.  means  that select returned an error, while  means it  timed out.  n rfds wfds efds specifies that it returned ! because the file descriptors in rfds, wfds and efds are ready  in their respective ways (see  select(2)), with n descriptors in  total. A 6 instance for struct timeval (see  select(2)). The  first argument corresponds to tv_sec, the second to tv_usec.  A timeout of  tells  select(2) to never time out, while   sets a finite timeout.  s us tells select to time out after s seconds and  us microseconds. BThe total number of ready file descriptors across all three sets. (The file descriptors ready for reading. !(The file descriptors ready for writing. "4The file descriptors having exceptional conditions.  !"7 !" !"  !"7None# The first . is watched for readiness to read, the second ; for readiness to write, and the third for exceptions. The   argument specifies when select should time out (if at all). $A simpler version of #! that uses file descriptor lists  instead of s. 8 is returned in case select gives  an error, otherwise 9 (rfds, wfds, efds) is returned, where  rfds, wfds and efds+ are lists of ready file descriptors (they & may be empty, such as in the case of select timing out). %This simpler version of # takes the same arguments as  $', but only returns the return value of  select(2) itself  (i.e. -1: on error, otherwise the number of ready file descriptors  in total). :#$%#$%#$%:#$%;           !"#$%&'()*+,-./0123452672689: select-0.4System.Posix.IO.Select.FdSet#System.Posix.IO.Select.FdSet.UnsafeSystem.Posix.IO.Select.TypesSystem.Posix.IO.SelectMisc%System.Posix.IO.Select.FdSet.InternalFdSetfromListinsert insertListemptyelemremove removeListinListinRangebound duplicate unsafeToListResultReadyTimeoutErrorCTimevalTimeNeverfinitenumReady readyRead readyWritereadyExceptionselectselect'select''mallocInitForeignPtrnullForeignPtrcErrorcTruec_fd_setsize_wrapperc_fd_isset_wrapperc_fd_clr_wrapperc_fd_set_wrapperc_fd_zero_wrapperremove'insert'elem'pointer allocate' duplicate'baseForeign.StorableStorable$fStorableCTimeval Data.MaybeNothingJust c_xselect