hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

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