]> gitweb.factorcode.org Git - factor.git/blob - library/io/windows/io.factor
6188fee500057d25e6edad7991d170a3dd979a4c
[factor.git] / library / io / windows / io.factor
1 ! Copyright (C) 2006 Mackenzie Straight, Doug Coleman.
2
3 IN: io
4 USING: win32-api win32-io-internals win32-server win32-stream ;
5 USING: alien kernel io-internals namespaces threads ;
6
7 : <file-reader> ( path -- stream ) <win32-file-reader> ;
8 : <file-writer> ( path -- stream ) <win32-file-writer> ;
9
10 SYMBOL: serv
11 : accept ( server -- client )
12     [
13         duplex-stream-in
14         serv set
15         serv get update-timeout new-socket 64 <buffer>
16         [
17             serv get alloc-io-callback f swap init-overlapped
18             >r >r >r serv get win32-stream-handle r> r>
19             buffer-ptr <alien> 0 32 32 f r> AcceptEx
20             handle-socket-error!=0/f stop
21         ] callcc1 drop
22         swap dup add-completion <win32-stream> <win32-duplex-stream>
23         dupd <win32-client-stream> swap buffer-free
24     ] with-scope ;
25
26 : <client> ( host port -- stream )
27     client-sockaddr new-socket
28     [ swap "sockaddr-in" c-size connect handle-socket-error!=0/f ] keep
29     dup add-completion <win32-stream> <win32-duplex-stream> ;
30 : <server> ( port -- stream ) make-win32-server ;
31
32 IN: io-internals
33
34 : io-multiplex ( ms -- )
35     dup -1 = [ drop INFINITE ] when cancel-timedout wait-for-io
36     swap [ schedule-thread-with ] [ drop ] if* ;
37
38 : init-io ( -- )
39     win32-init-stdio
40     init-winsock ;
41