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
17
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
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}