Fix resolver on FreeBSD
parent
bc5bc22072
commit
83d6e10ac0
|
@ -51,10 +51,13 @@ M: inet4 make-sockaddr ( inet -- sockaddr )
|
||||||
"0.0.0.0" or
|
"0.0.0.0" or
|
||||||
rot inet-pton *uint over set-sockaddr-in-addr ;
|
rot inet-pton *uint over set-sockaddr-in-addr ;
|
||||||
|
|
||||||
|
SYMBOL: port-override
|
||||||
|
|
||||||
|
: (port) port-override get [ ] [ ] ?if ;
|
||||||
|
|
||||||
M: inet4 parse-sockaddr
|
M: inet4 parse-sockaddr
|
||||||
>r dup sockaddr-in-addr <uint> r> inet-ntop
|
>r dup sockaddr-in-addr <uint> r> inet-ntop
|
||||||
swap sockaddr-in-port ntohs <inet4> ;
|
swap sockaddr-in-port ntohs (port) <inet4> ;
|
||||||
|
|
||||||
|
|
||||||
M: inet6 inet-ntop ( data addrspec -- str )
|
M: inet6 inet-ntop ( data addrspec -- str )
|
||||||
drop 16 memory>string 2 <groups> [ be> >hex ] map ":" join ;
|
drop 16 memory>string 2 <groups> [ be> >hex ] map ":" join ;
|
||||||
|
@ -80,7 +83,7 @@ M: inet6 make-sockaddr ( inet -- sockaddr )
|
||||||
|
|
||||||
M: inet6 parse-sockaddr
|
M: inet6 parse-sockaddr
|
||||||
>r dup sockaddr-in6-addr r> inet-ntop
|
>r dup sockaddr-in6-addr r> inet-ntop
|
||||||
swap sockaddr-in6-port ntohs <inet6> ;
|
swap sockaddr-in6-port ntohs (port) <inet6> ;
|
||||||
|
|
||||||
: addrspec-of-family ( af -- addrspec )
|
: addrspec-of-family ( af -- addrspec )
|
||||||
{
|
{
|
||||||
|
@ -102,15 +105,23 @@ M: f parse-sockaddr nip ;
|
||||||
[ dup addrinfo-next swap addrinfo>addrspec ]
|
[ dup addrinfo-next swap addrinfo>addrspec ]
|
||||||
[ ] unfold nip [ ] subset ;
|
[ ] unfold nip [ ] subset ;
|
||||||
|
|
||||||
|
: prepare-resolve-host ( host serv passive? -- host' serv' flags )
|
||||||
|
>r
|
||||||
|
>r string>char-alien r>
|
||||||
|
dup integer? [ port-override set f ] [ string>char-alien ] if
|
||||||
|
r> AI_PASSIVE 0 ? ;
|
||||||
|
|
||||||
M: object resolve-host ( host serv passive? -- seq )
|
M: object resolve-host ( host serv passive? -- seq )
|
||||||
>r dup integer? [ number>string ] when
|
[
|
||||||
"addrinfo" <c-object>
|
prepare-resolve-host
|
||||||
r> [ AI_PASSIVE over set-addrinfo-flags ] when
|
"addrinfo" <c-object>
|
||||||
PF_UNSPEC over set-addrinfo-family
|
[ set-addrinfo-flags ] keep
|
||||||
IPPROTO_TCP over set-addrinfo-protocol
|
PF_UNSPEC over set-addrinfo-family
|
||||||
f <void*> [ getaddrinfo addrinfo-error ] keep *void*
|
IPPROTO_TCP over set-addrinfo-protocol
|
||||||
[ parse-addrinfo-list ] keep
|
f <void*> [ getaddrinfo addrinfo-error ] keep *void*
|
||||||
freeaddrinfo ;
|
[ parse-addrinfo-list ] keep
|
||||||
|
freeaddrinfo
|
||||||
|
] with-scope ;
|
||||||
|
|
||||||
M: object host-name ( -- name )
|
M: object host-name ( -- name )
|
||||||
256 <byte-array> dup dup length gethostname
|
256 <byte-array> dup dup length gethostname
|
||||||
|
|
Loading…
Reference in New Issue