view 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
line wrap: on
line source

use v6.c;
unit class Abyss::Server:ver<0.0.1>:auth<cpan:ANATOFUZ>;
use MONKEY-SEE-NO-EVAL;
use IO::Socket::Unix;
use NativeCall;

sub close(int32) returns int32 is native { ... }
sub dup(int32 $old) returns int32 is native { ... }
sub dup2(int32 $new, int32 $old) returns int32 is native { ... }

method readeval 
{
    my $listen = IO::Socket::Unix.new(  :listen,
                                        :localhost<localhost>,
                                        :localport(3333) );            
    my $backup = dup(1);
    say DateTime.now;

    loop
    {
        my $conn = $listen.accept;
        my $sock_msg;
        my $buf = $conn.recv();
        $sock_msg = $buf;
        close(1);
        dup2($conn.native-descriptor(), 1);
        EVALFILE $sock_msg;
        dup2($backup, 1);
        close($backup);
        $conn.close;
    }

    $listen.close;
}