net/udp_echo_server/server

Code

server.odin ¶
49 linesSource

1package main
2
3import "core:fmt"
4import "core:net"
5
6udp_echo_server :: proc(ip: string, port: int) {
7	local_addr, ok := net.parse_ip4_address(ip)
8	if !ok {
9		fmt.println("Failed to parse IP address")
10		return
11	}
12	endpoint := net.Endpoint {
13		address = local_addr,
14		port    = port,
15	}
16	// for the server, we create a *bound* UDP socket,
17	// because we want to start listen the port immediately
18	sock, err := net.make_bound_udp_socket(endpoint.address, endpoint.port)
19	if err != nil {
20		fmt.println("Failed to make bound UDP socket", err)
21		return
22	}
23	fmt.printfln("Listening on UDP: %s", net.endpoint_to_string(endpoint))
24	buffer: [256]u8
25	for {
26		bytes_recv, remote_endpoint, err_recv := net.recv_udp(sock, buffer[:])
27		if err_recv != nil {
28			fmt.println("Failed to receive data", err_recv)
29		}
30		received := buffer[:bytes_recv]
31		fmt.printfln("Server received from %s", net.endpoint_to_string(remote_endpoint))
32		fmt.printfln("Received data [ %d bytes ]: %s", len(received), received)
33		bytes_sent, err_send := net.send_udp(sock, received, remote_endpoint)
34		if err_send != nil {
35			fmt.println("Failed to send data", err_send)
36		}
37		sent := received[:bytes_sent]
38		fmt.printfln("Server sent [ %d bytes ]: %s", len(sent), sent)
39		
40		// `net.endpoint_to_string` creates temporarily-allocated string
41		free_all(context.temp_allocator)
42	}
43	net.close(sock)
44	fmt.println("Closed socket")
45}
46
47main :: proc() {
48	udp_echo_server("127.0.0.1", 8080)
49}

Declarations Used 9