! Copyright (C) 2004, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: alien.c-types kernel bit-arrays sequences assocs unix
-math namespaces accessors math.order locals unix.time fry
-io.ports io.backend.unix io.backend.unix.multiplexers ;
+USING: alien.data kernel bit-arrays sequences assocs math
+namespaces accessors math.order locals fry io.ports
+io.backend.unix io.backend.unix.multiplexers unix unix.ffi
+unix.time layouts ;
IN: io.backend.unix.multiplexers.select
TUPLE: select-mx < mx read-fdset write-fdset ;
! FD_SET to be an array of cells, so we have to account for
! byte order differences on big endian platforms
: munge ( i -- i' )
- little-endian? [ BIN: 11000 bitxor ] unless ; inline
+ little-endian? [
+ cell 4 = [ 0b11000 ] [ 0b111000 ] if
+ bitxor ] unless ; inline
: <select-mx> ( -- mx )
select-mx new-mx
M:: select-mx wait-for-events ( nanos mx -- )
mx
- [ init-fdsets nanos 1000 /i dup [ make-timeval ] when select multiplexer-error drop ]
+ [ init-fdsets nanos dup [ 1000 /i make-timeval ] when select multiplexer-error drop ]
[ [ read-fdset/tasks ] keep [ input-available ] check-fdset ]
[ [ write-fdset/tasks ] keep [ output-available ] check-fdset ]
tri ;