summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-31 22:35:26 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-31 22:37:55 +0000
commit45165b0192325867771acc0e27a443100b700b3e (patch)
treeb43c4c37863be52af97c9a2396e9cb64abf9b515 /examples
parentb21be50c3a7c3262c80492ade5dee2795dcffcb1 (diff)
Improved networking examplev0.4.0
Diffstat (limited to 'examples')
-rw-r--r--examples/networking/echo_server.zc32
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.";
}
}
}