From d57a9c419d047711681c505bc9f61237c23b50d8 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Tue, 2 Feb 2021 10:36:51 +0200 Subject: [PATCH] examples: add net_udp_server_and_client.v --- examples/net_udp_server_and_client.v | 44 ++++++++++++++++++++++++++++ vlib/net/udp.v | 16 +++++----- 2 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 examples/net_udp_server_and_client.v diff --git a/examples/net_udp_server_and_client.v b/examples/net_udp_server_and_client.v new file mode 100644 index 0000000000..77abffd5bc --- /dev/null +++ b/examples/net_udp_server_and_client.v @@ -0,0 +1,44 @@ +import os +import os.cmdline +import net + +fn main() { + println('Usage: net_udp_server_and_client [-l] [-p 5000]') + println(' -l - act as a server and listen') + println(' -p XXXX - custom port number') + println('------------------------------------------') + is_server := '-l' in os.args + port := cmdline.option(os.args, '-p', '40001').int() + mut buf := []byte{len: 100} + if is_server { + println('UDP echo server, listening for udp packets on port: $port') + mut c := net.listen_udp(port) ? + for { + read, addr := c.read(mut buf) or { continue } + println('received $read bytes from $addr') + c.write_to(addr, buf[..read]) or { + println('Server: connection dropped') + continue + } + } + } else { + println('UDP client, sending packets to port: ${port}.\nType `exit` to exit.') + mut c := net.dial_udp('localhost', 'localhost:$port') ? + for { + mut line := os.input('client > ') + match line { + '' { + line = '\n' + } + 'exit' { + println('goodbye.') + exit(0) + } + else {} + } + c.write_str(line) ? + read, _ := c.read(mut buf) ? + println('server : ' + buf[0..read].bytestr()) + } + } +} diff --git a/vlib/net/udp.v b/vlib/net/udp.v index 7d769c5e77..b119d34e3f 100644 --- a/vlib/net/udp.v +++ b/vlib/net/udp.v @@ -3,10 +3,16 @@ module net import time const ( - udp_default_read_timeout = 30 * time.second - udp_default_write_timeout = 30 * time.second + udp_default_read_timeout = time.second / 10 + udp_default_write_timeout = time.second / 10 ) +struct UdpSocket { + handle int + l Addr + r ?Addr +} + pub struct UdpConn { pub mut: sock UdpSocket @@ -168,12 +174,6 @@ pub fn listen_udp(port int) ?&UdpConn { } } -struct UdpSocket { - handle int - l Addr - r ?Addr -} - fn new_udp_socket(local_port int) ?&UdpSocket { sockfd := socket_error(C.socket(SocketFamily.inet, SocketType.udp, 0)) ? mut s := &UdpSocket{