diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-31 22:35:26 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-31 22:37:55 +0000 |
| commit | 45165b0192325867771acc0e27a443100b700b3e (patch) | |
| tree | b43c4c37863be52af97c9a2396e9cb64abf9b515 /examples/networking/echo_server.zc | |
| parent | b21be50c3a7c3262c80492ade5dee2795dcffcb1 (diff) | |
Improved networking examplev0.4.0
Diffstat (limited to 'examples/networking/echo_server.zc')
| -rw-r--r-- | examples/networking/echo_server.zc | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/examples/networking/echo_server.zc b/examples/networking/echo_server.zc index 2934923..64c60da 100644 --- a/examples/networking/echo_server.zc +++ b/examples/networking/echo_server.zc @@ -4,6 +4,7 @@ import "std/net.zc" def SIZE = 1024; fn main() { + raw { setbuf(stdout, NULL); } "Starting Echo Server on 127.0.0.1:8080..."; let listener_res = TcpListener::bind("127.0.0.1", 8080); @@ -13,24 +14,37 @@ fn main() { } let listener = listener_res.unwrap(); - defer listener.close(); loop { let client_res = listener.accept(); if client_res.is_ok() { let stream = client_res.unwrap(); - defer stream.close(); - let buf = (char*)malloc(SIZE); - defer free(buf); - let read_res = stream.read(buf, SIZE); + "New Connection!"; - if read_res.is_ok() { + let buf: char[SIZE]; + + while true { + let read_res = stream.read(&buf[0], SIZE); + + if read_res.is_err() { + !"Read error: {read_res.err}"; + break; + } + let bytes = read_res.unwrap(); - if bytes > 0 { - stream.write(buf, bytes); - "Echoed {bytes} bytes."; + if bytes == 0 { + "Client disconnected."; + break; } + + let write_res = stream.write(&buf[0], bytes); + if write_res.is_err() { + !"Write error: {write_res.err}"; + break; + } + + "Echoed {bytes} bytes."; } } } |
