XU XUv0.8.8
中文

Docs / Tutorial

14 · TCP echo

listen_on / accept / xu handle per connection.

ln := net.listen_on("tcp", "127.0.0.1:19000") or (err) { << 1 }
c := ln.accept() or (err) { -> }
xu handle(c)

From another terminal: printf ping | nc 127.0.0.1 19000.

On Windows, TCP dial/listen return an error stub — they do not fail silently.

Source

@main

#net

// TCP echo。
//   printf ping | nc 127.0.0.1 19000
// UDP 见 15udp_echo。

fn handle(c net.Conn) {
    mut conn := c
    buf := conn.read(4096) or (err) {
        conn.close() or (e2) { << }
        <<
    }
    if buf.len == 0 {
        conn.close() or (err) { << }
        <<
    }
    conn.write(&buf) or (err) { << }
    conn.close() or (err) { << }
}

fn main() int {
    ln := net.listen_on("tcp", "127.0.0.1:19000") or (err) {
        println(err.msg())
        << 1
    }
    println("tcp://127.0.0.1:19000  echo")
    mut running := true
    while running {
        c := ln.accept() or (err) {
            ->
        }
        xu handle(c)
    }
    << 0
}

Run from the separate examples repository root; source files live under examples/.