June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
|
|
@ -19,7 +19,7 @@ readc(dispatch w, file i, file o, data b)
|
|||
b_rule(b, -1, t, 0, e);
|
||||
f_data(o, b);
|
||||
w_register(w, o);
|
||||
b_bill(b, t, e, ~t - e);
|
||||
b_ecopy(b, t, e, ~t - e);
|
||||
} else {
|
||||
b_add(b, t);
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ serve(dispatch w, file s)
|
|||
data b;
|
||||
|
||||
accept(i, o, s, NONBLOCKING_INPUT | NONBLOCKING_OUTPUT);
|
||||
w_watch(w, i, readc, w, i, o, b);
|
||||
w.watch(i, readc, w, i, o, b);
|
||||
}
|
||||
|
||||
integer
|
||||
|
|
@ -44,8 +44,8 @@ main(void)
|
|||
file s;
|
||||
|
||||
tcpip_listen(s, 12321, 0);
|
||||
w_watch(w, s, serve, w, s);
|
||||
w_press(w);
|
||||
w.watch(s, serve, w, s);
|
||||
w.press;
|
||||
|
||||
return 0;
|
||||
0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
my $socket = IO::Socket::INET.new:
|
||||
localhost => 'localhost',
|
||||
localport => 12321,
|
||||
listen => 1;
|
||||
:localhost<localhost>,
|
||||
:localport<12321>,
|
||||
:listen;
|
||||
|
||||
while $socket.accept -> $conn {
|
||||
say "Accepted connection";
|
||||
7
Task/Echo-server/Perl-6/echo-server-2.pl6
Normal file
7
Task/Echo-server/Perl-6/echo-server-2.pl6
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
react {
|
||||
whenever IO::Socket::Async.listen('0.0.0.0', 12321) -> $conn {
|
||||
whenever $conn.Supply.lines -> $line {
|
||||
$conn.print( "$line\n" ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
30
Task/Echo-server/Scala/echo-server.scala
Normal file
30
Task/Echo-server/Scala/echo-server.scala
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import java.io.PrintWriter
|
||||
import java.net.{ServerSocket, Socket}
|
||||
|
||||
import scala.io.Source
|
||||
|
||||
object EchoServer extends App {
|
||||
private val serverSocket = new ServerSocket(23)
|
||||
private var numConnections = 0
|
||||
|
||||
class ClientHandler(clientSocket: Socket) extends Runnable {
|
||||
private val (connectionId, closeCmd) = ({numConnections += 1; numConnections}, ":exit")
|
||||
|
||||
override def run(): Unit =
|
||||
new PrintWriter(clientSocket.getOutputStream, true) {
|
||||
println(s"Connection opened, close with entering '$closeCmd'.")
|
||||
Source.fromInputStream(clientSocket.getInputStream).getLines
|
||||
.takeWhile(!_.toLowerCase.startsWith(closeCmd))
|
||||
.foreach { line =>
|
||||
Console.println(s"Received on #$connectionId: $line")
|
||||
println(line) // Echo
|
||||
}
|
||||
Console.println(s"Gracefully closing connection, #$connectionId")
|
||||
clientSocket.close()
|
||||
}
|
||||
|
||||
println(s"Handling connection, $connectionId")
|
||||
}
|
||||
|
||||
while (true) new Thread(new ClientHandler(serverSocket.accept())).start()
|
||||
}
|
||||
178
Task/Echo-server/X86-Assembly/echo-server.x86
Normal file
178
Task/Echo-server/X86-Assembly/echo-server.x86
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
; x86_64 Linux NASM
|
||||
|
||||
global _start
|
||||
|
||||
%define af_inet 2
|
||||
%define sock_stream 1
|
||||
%define default_proto 0
|
||||
%define sol_sock 1
|
||||
%define reuse_addr 2
|
||||
%define reuse_port 15
|
||||
%define server_port 9001
|
||||
%define addr_any 0
|
||||
%define family_offset 0
|
||||
%define port_offset 2
|
||||
%define addr_offset 4
|
||||
%define unused_offset 8
|
||||
%define addr_len 16
|
||||
%define buffer_len 64
|
||||
%define max_connections 3
|
||||
|
||||
|
||||
section .text
|
||||
|
||||
; rdi - 16 bit value to be byte swapped
|
||||
; return - byte swapped value
|
||||
htn_swap16:
|
||||
|
||||
xor rax, rax
|
||||
mov rdx, 0x000000ff
|
||||
|
||||
mov rsi, rdi
|
||||
and rsi, rdx
|
||||
shl rsi, 8
|
||||
or rax, rsi
|
||||
shl rdx, 8
|
||||
|
||||
mov rsi, rdi
|
||||
and rsi, rdx
|
||||
shr rsi, 8
|
||||
or rax, rsi
|
||||
ret
|
||||
|
||||
; return - server socket
|
||||
create_server_socket:
|
||||
|
||||
mov rax, 41
|
||||
mov rdi, af_inet
|
||||
mov rsi, sock_stream
|
||||
mov rdx, default_proto
|
||||
syscall
|
||||
push rax
|
||||
|
||||
mov rax, 54
|
||||
mov rdi, qword [rsp]
|
||||
mov rsi, sol_sock
|
||||
mov rdx, reuse_addr
|
||||
mov qword [rsp - 16], 1
|
||||
lea r10, [rsp - 16]
|
||||
mov r8, 4
|
||||
syscall
|
||||
|
||||
mov rax, 54
|
||||
mov rdi, qword [rsp]
|
||||
mov rsi, sol_sock
|
||||
mov rdx, reuse_port
|
||||
mov qword [rsp - 16], 1
|
||||
lea r10, [rsp - 16]
|
||||
mov r8, 4
|
||||
syscall
|
||||
|
||||
|
||||
pop rax
|
||||
ret
|
||||
|
||||
; rdi - socket
|
||||
; rsi - port
|
||||
; rdx - connections
|
||||
; return - void
|
||||
bind_and_listen:
|
||||
|
||||
push rdi
|
||||
push rdx
|
||||
|
||||
mov rdi, rsi
|
||||
call htn_swap16
|
||||
|
||||
lea rsi, [rsp - 16]
|
||||
mov word [rsi + family_offset], af_inet
|
||||
mov word [rsi + port_offset], ax
|
||||
mov dword [rsi + addr_offset], addr_any
|
||||
mov qword [rsi + unused_offset], 0
|
||||
|
||||
mov rax, 49
|
||||
mov rdi, qword [rsp + 8]
|
||||
mov rdx, addr_len
|
||||
syscall
|
||||
|
||||
mov rax, 50
|
||||
pop rsi
|
||||
pop rdi
|
||||
syscall
|
||||
ret
|
||||
|
||||
; rdi - server socket
|
||||
; return - client socket
|
||||
accept:
|
||||
|
||||
mov rax, 43
|
||||
lea rsi, [rsp - 16]
|
||||
lea rdx, [rsp - 24]
|
||||
syscall
|
||||
ret
|
||||
|
||||
; rdi - client socket
|
||||
; return - void
|
||||
echo:
|
||||
|
||||
push rdi
|
||||
mov rax, 0
|
||||
lea rsi, [rsp - 104]
|
||||
mov rdx, buffer_len
|
||||
syscall
|
||||
|
||||
pop rdi
|
||||
mov rdx, rax
|
||||
lea rsi, [rsp - 112]
|
||||
mov rax, 1
|
||||
syscall
|
||||
ret
|
||||
|
||||
|
||||
_start:
|
||||
|
||||
call create_server_socket
|
||||
mov r14, rax
|
||||
|
||||
mov rdi, rax
|
||||
mov rsi, server_port
|
||||
mov rdx, max_connections
|
||||
call bind_and_listen
|
||||
|
||||
accept_connection:
|
||||
|
||||
mov rdi, r14
|
||||
call accept
|
||||
|
||||
mov r15, rax
|
||||
mov rax, 57
|
||||
syscall
|
||||
|
||||
test rax, rax
|
||||
jz handle_connection
|
||||
|
||||
; close client socket
|
||||
mov rax, 3
|
||||
mov rdi, r15
|
||||
syscall
|
||||
jmp accept_connection
|
||||
|
||||
handle_connection:
|
||||
|
||||
mov rdi, r15
|
||||
call echo
|
||||
|
||||
close_client:
|
||||
mov rax, 3
|
||||
mov rdi, r15
|
||||
syscall
|
||||
|
||||
close_server:
|
||||
mov rax, 3
|
||||
mov rdi, r14
|
||||
syscall
|
||||
|
||||
exit:
|
||||
mov rax, 60
|
||||
xor rdi, rdi
|
||||
syscall
|
||||
Loading…
Add table
Add a link
Reference in a new issue