io.backend.unix.multiplexers.epoll: update for STRUCT:
parent
26cc551049
commit
2037667473
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.c-types kernel destructors bit-arrays
|
USING: accessors classes.struct kernel destructors bit-arrays
|
||||||
sequences assocs struct-arrays math namespaces locals fry unix
|
sequences assocs struct-arrays math namespaces locals fry unix
|
||||||
unix.linux.epoll unix.time io.ports io.backend.unix
|
unix.linux.epoll unix.time io.ports io.backend.unix
|
||||||
io.backend.unix.multiplexers ;
|
io.backend.unix.multiplexers ;
|
||||||
|
@ -16,14 +16,14 @@ TUPLE: epoll-mx < mx events ;
|
||||||
: <epoll-mx> ( -- mx )
|
: <epoll-mx> ( -- mx )
|
||||||
epoll-mx new-mx
|
epoll-mx new-mx
|
||||||
max-events epoll_create dup io-error >>fd
|
max-events epoll_create dup io-error >>fd
|
||||||
max-events "epoll-event" <struct-array> >>events ;
|
max-events epoll-event <struct-array> >>events ;
|
||||||
|
|
||||||
M: epoll-mx dispose* fd>> close-file ;
|
M: epoll-mx dispose* fd>> close-file ;
|
||||||
|
|
||||||
: make-event ( fd events -- event )
|
: make-event ( fd events -- event )
|
||||||
"epoll-event" <c-object>
|
epoll-event <struct>
|
||||||
[ set-epoll-event-events ] keep
|
swap >>events
|
||||||
[ set-epoll-event-fd ] keep ;
|
swap >>fd ;
|
||||||
|
|
||||||
:: do-epoll-ctl ( fd mx what events -- )
|
:: do-epoll-ctl ( fd mx what events -- )
|
||||||
mx fd>> what fd fd events make-event epoll_ctl io-error ;
|
mx fd>> what fd fd events make-event epoll_ctl io-error ;
|
||||||
|
@ -55,7 +55,7 @@ M: epoll-mx remove-output-callbacks ( fd mx -- seq )
|
||||||
epoll_wait multiplexer-error ;
|
epoll_wait multiplexer-error ;
|
||||||
|
|
||||||
: handle-event ( event mx -- )
|
: handle-event ( event mx -- )
|
||||||
[ epoll-event-fd ] dip
|
[ fd>> ] dip
|
||||||
[ EPOLLIN EPOLLOUT bitor do-epoll-del ]
|
[ EPOLLIN EPOLLOUT bitor do-epoll-del ]
|
||||||
[ input-available ] [ output-available ] 2tri ;
|
[ input-available ] [ output-available ] 2tri ;
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
IN: unix.linux.epoll
|
IN: unix.linux.epoll
|
||||||
USING: alien.syntax math ;
|
USING: alien.syntax classes.struct math ;
|
||||||
|
|
||||||
FUNCTION: int epoll_create ( int size ) ;
|
FUNCTION: int epoll_create ( int size ) ;
|
||||||
|
|
||||||
FUNCTION: int epoll_ctl ( int epfd, int op, int fd, epoll_event* event ) ;
|
FUNCTION: int epoll_ctl ( int epfd, int op, int fd, epoll_event* event ) ;
|
||||||
|
|
||||||
C-STRUCT: epoll-event
|
STRUCT: epoll-event
|
||||||
{ "uint" "events" }
|
{ events uint }
|
||||||
{ "uint" "fd" }
|
{ fd uint }
|
||||||
{ "uint" "padding" } ;
|
{ padding uint } ;
|
||||||
|
|
||||||
FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ;
|
FUNCTION: int epoll_wait ( int epfd, epoll_event* events, int maxevents, int timeout ) ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue