comparison Prepaper/code/abyss.p6 @ 22:b96b3244307b

update paper & slide
author e165727 <e165727@ie.u-ryukyu.ac.jp>
date Sun, 16 Feb 2020 18:20:36 +0900
parents e234acddcfab
children 27f7561b1135
comparison
equal deleted inserted replaced
21:32db366529dd 22:b96b3244307b
1 unit class Abyss::Server:ver<0.0.1>; 1 use v6.c;
2 unit class Abyss::Server:ver<0.0.1>:auth<cpan:ANATOFUZ>;
2 use MONKEY-SEE-NO-EVAL; 3 use MONKEY-SEE-NO-EVAL;
4 use IO::Socket::Unix;
5 use NativeCall;
3 6
4 method readeval { 7 sub close(int32) returns int32 is native { ... }
5 my $listen = IO::Socket::INET.new( 8 sub dup(int32 $old) returns int32 is native { ... }
6 :listen, 9 sub dup2(int32 $new, int32 $old) returns int32 is native { ... }
7 :localhost<localhost>, 10
8 :localport(3333) 11 method readeval
9 ); 12 {
10 loop { 13 my $listen = IO::Socket::Unix.new( :listen,
11 my $conn = $listen.accept; 14 :localhost<localhost>,
12 while my $buf = $conn.read(1024) { 15 :localport(3333) );
13 EVALFILE $buf.decode; 16 my $backup = dup(1);
17 say DateTime.now;
18
19 loop
20 {
21 my $conn = $listen.accept;
22 my $sock_msg;
23 my $buf = $conn.recv();
24 $sock_msg = $buf;
25 close(1);
26 dup2($conn.native-descriptor(), 1);
27 EVALFILE $sock_msg;
28 dup2($backup, 1);
29 close($backup);
30 $conn.close;
14 } 31 }
15 $conn.close; 32
16 } 33 $listen.close;
17 } 34 }