46 lines
		
	
	
		
			997 B
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			997 B
		
	
	
	
		
			V
		
	
	
import net
 | 
						|
 | 
						|
// This file shows how a basic TCP echo server can be implemented using
 | 
						|
// the `net` module. You can connect to the server by using netcat
 | 
						|
// or telnet, in separate shells, for example:
 | 
						|
// `nc 127.0.0.1 12345`
 | 
						|
// `telnet 127.0.0.1 12345`
 | 
						|
fn handle_connection(con net.Socket) {
 | 
						|
	peer_ip := con.peer_ip() or {
 | 
						|
		'0.0.0.0'
 | 
						|
	}
 | 
						|
	eprintln('${peer_ip:16} | new client connected')
 | 
						|
	defer {
 | 
						|
		eprintln('${peer_ip:16} | closing connection...')
 | 
						|
		con.close() or { }
 | 
						|
	}
 | 
						|
	con.send_string("Welcome to V's TCP Echo server.\n") or {
 | 
						|
		return
 | 
						|
	}
 | 
						|
	for {
 | 
						|
		line := con.read_line()
 | 
						|
		if line.len == 0 {
 | 
						|
			return
 | 
						|
		}
 | 
						|
		eprintln('${peer_ip:16} | received line: ' + line.trim_space())
 | 
						|
		con.send_string(line) or {
 | 
						|
			return
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
	server_port := 12345
 | 
						|
	eprintln('Starting an echo server, listening on port: $server_port')
 | 
						|
	server := net.listen(server_port) or {
 | 
						|
		panic(err)
 | 
						|
	}
 | 
						|
	for {
 | 
						|
		con := server.accept() or {
 | 
						|
			server.close() or { }
 | 
						|
			panic(err)
 | 
						|
		}
 | 
						|
		go handle_connection(con)
 | 
						|
	}
 | 
						|
}
 |