5 function psi\endhostent() : void {
6 return endhostent() as void(endhostent);
8 function psi\endnetent() : void {
9 return endnetent() as void(endnetent);
11 function psi\endprotoent() : void {
12 return endprotoent() as void(endprotoent);
14 function psi\endservent() : void {
15 return endservent() as void(endservent);
18 function psi\sethostent(bool $stayopen) : void {
19 let stayopen = intval($stayopen);
20 return sethostent(stayopen) as void(sethostent);
22 function psi\setnetent(bool $stayopen) : void {
23 let stayopen = intval($stayopen);
24 return setnetent(stayopen) as void(setnetent);
26 function psi\setprotoent(bool $stayopen) : void {
27 let stayopen = intval($stayopen);
28 return setprotoent(stayopen) as void(setprotoent);
30 function psi\setservent(bool $stayopen) : void {
31 let stayopen = intval($stayopen);
32 return setservent(stayopen) as void(setservent);
35 function psi\gethostent() : array {
36 return gethostent() as to_array(*gethostent,
38 to_array(h_aliases, to_string(h_aliases)),
41 to_array(h_addr_list, to_string(h_addr_list, h_length))
45 function psi\gai_strerror(int $errcode) : string {
46 let errcode = intval($errcode);
47 return gai_strerror(errcode) as to_string(gai_strerror);
50 // extern int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
51 function psi\getaddrinfo(string $node, string $service, array $hints = NULL, object &$res = NULL) : int {
52 let node = strval($node);
53 let service = strval($service);
54 let hints = &arrval($hints,
61 return getaddrinfo(node, service, hints, res) as to_int(getaddrinfo);
62 set $res = to_array(**res,
68 to_string(ai_addr, ai_addrlen),
69 to_string(ai_canonname),
70 to_array(*ai_next, ...)
72 free freeaddrinfo(*res);
75 // extern int getnameinfo(struct sockaddr *sa, socklen_t salen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
76 function psi\getnameinfo(string $addr, string &$host = NULL, string &$service = NULL, int $flags = 0) : int {
77 let sa = strval($addr);
78 let salen = strlen($addr);
79 let hostlen = NI_MAXHOST;
80 let host = calloc(hostlen, sizeof(char));
81 let servlen = NI_MAXSERV;
82 let serv = calloc(servlen, sizeof(char));
83 let flags = intval($flags);
84 return getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) as to_int(getnameinfo);
85 set $host = to_string(host);
86 set $service = to_string(serv);