30 lines
961 B
Plaintext
30 lines
961 B
Plaintext
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;
|
|
}
|