forked from Orchid/orchid
Initial networking module.
This commit is contained in:
29
examples/http-server-simple/main.orc
Normal file
29
examples/http-server-simple/main.orc
Normal file
@@ -0,0 +1,29 @@
|
||||
import std::socket::tcp::(bind, accept, read, write_all, close, peer_addr, listener_addr)
|
||||
import system::io::println
|
||||
|
||||
let http_response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 44\r\nConnection: close\r\n\r\n<html><body><h1>Hello Orchid!</h1></body></html>"
|
||||
|
||||
let handle_client = \client. do cps {
|
||||
cps addr = peer_addr client;
|
||||
cps println $ "Client connected: ${addr}";
|
||||
cps request = read client 4096;
|
||||
cps println $ "Received request from ${addr}";
|
||||
cps _ = write_all client http_response;
|
||||
cps _ = close client;
|
||||
cps println $ "Connection closed: ${addr}";
|
||||
cps pass 0;
|
||||
}
|
||||
|
||||
let accept_loop = \server. do cps {
|
||||
cps client = accept server;
|
||||
cps _ = handle_client client;
|
||||
cps pass $ accept_loop server;
|
||||
}
|
||||
|
||||
let main = do cps {
|
||||
cps server = bind "127.0.0.1:8080";
|
||||
cps addr = listener_addr server;
|
||||
cps println $ "HTTP Server listening on ${addr}";
|
||||
cps println "Press Ctrl+C to stop";
|
||||
cps pass $ accept_loop server;
|
||||
}
|
||||
Reference in New Issue
Block a user