ip.ha (1055B)
1 // SPDX-License-Identifier: MPL-2.0 2 // (c) Hare authors <https://harelang.org> 3 4 // Provides default dialers for tcp and udp 5 use net; 6 use net::tcp; 7 use net::udp; 8 9 fn dial_tcp(addr: str, service: str) (net::socket | error) = { 10 const result = resolve("tcp", addr, service)?; 11 const addrs = result.0, port = result.1; 12 defer free(addrs); 13 for (let i = 0z; i < len(addrs); i += 1) { 14 const addr = addrs[i]; 15 match (tcp::connect(addr, port)) { 16 case let conn: net::socket => 17 return conn; 18 case let err: net::error => 19 if (i + 1 >= len(addrs)) { 20 return err; 21 }; 22 }; 23 }; 24 abort(); // Unreachable 25 }; 26 27 fn dial_udp(addr: str, service: str) (net::socket | error) = { 28 const result = resolve("udp", addr, service)?; 29 const addrs = result.0, port = result.1; 30 defer free(addrs); 31 for (let i = 0z; i < len(addrs); i += 1) { 32 const addr = addrs[i]; 33 match (udp::connect(addr, port)) { 34 case let sock: net::socket => 35 return sock; 36 case let err: net::error => 37 if (i + 1 >= len(addrs)) { 38 return err; 39 }; 40 }; 41 }; 42 abort(); // Unreachable 43 };