blob: 5ff6abd421f8048ceba94cad9cfeb8eae8d243b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
typedef struct DHandle {
u64 type;
} DHandle;
b32 d_init(void) {
return true;
}
String d_hostname_ip_get(String host, Allocator alloc) {
char *host_cstr;
Allocator talloc;
int err;
String ip;
talloc = un_alloc_temp_get();
host_cstr = (char *) un_string_to_cstring(host, talloc);
// @note, host_info can return multiple ip addresses?
struct hostent *host_info = gethostbyname(host_cstr);
if (!host_info) {
err = h_errno;
switch (err) {
case TRY_AGAIN:
cyn_log_write_cstring(CYN_LOG_ERROR, (u8*) "d_get_hostname_ip: host not found (TRY_AGAIN).");
break;
case HOST_NOT_FOUND:
cyn_log_write_cstring(CYN_LOG_ERROR, (u8*) "d_get_hostname_ip: host not found (HOST_NOT_FOUND).");
break;
case NO_DATA:
cyn_log_write_cstring(CYN_LOG_ERROR, (u8*) "d_get_hostname_ip: no host data (NO_DATA).");
break;
default:
cyn_log_write_cstring(CYN_LOG_ERROR, (u8*) "d_get_hostname_ip: unspecified error.");
break;
}
return CLITERAL(String) { 0 };
}
if (host_info) {
assert(host_info->h_addrtype == AF_INET);
assert(host_info->h_length >= (s32)sizeof(struct in_addr));
ip = un_string_from_cstring(inet_ntoa(*(struct in_addr *)*host_info->h_addr_list));
return un_string_copy(ip, alloc);
}
return CLITERAL(String) { 0 };
}
DHandle* d_tcp_connect(String ip, u16 port) {
}
|