53 lines
2.3 KiB
Plaintext
53 lines
2.3 KiB
Plaintext
name$ = "www.kame.net"
|
|
|
|
AF_INET = 2
|
|
AF_INET6 = 23
|
|
WSASYS_STATUS_LEN = 128
|
|
WSADESCRIPTION_LEN = 256
|
|
|
|
SYS "LoadLibrary", "WS2_32.DLL" TO ws2%
|
|
SYS "GetProcAddress", ws2%, "WSAStartup" TO `WSAStartup`
|
|
SYS "GetProcAddress", ws2%, "WSACleanup" TO `WSACleanup`
|
|
SYS "GetProcAddress", ws2%, "getaddrinfo" TO `getaddrinfo`
|
|
|
|
DIM WSAdata{wVersion{l&,h&}, wHighVersion{l&,h&}, \
|
|
\ szDescription&(WSADESCRIPTION_LEN), szSystemStatus&(WSASYS_STATUS_LEN), \
|
|
\ iMaxSockets{l&,h&}, iMaxUdpDg{l&,h&}, lpVendorInfo%}
|
|
|
|
DIM addrinfo{ai_flags%, ai_family%, ai_socktype%, ai_protocol%, \
|
|
\ ai_addrlen%, lp_ai_canonname%, lp_ai_addr%, lp_ai_next%}
|
|
DIM ipv4info{} = addrinfo{}, ipv6info{} = addrinfo{}
|
|
|
|
DIM sockaddr_in{sin_family{l&,h&}, sin_port{l&,h&}, sin_addr&(3), sin_zero&(7)}
|
|
DIM sockaddr_in6{sin6_family{l&,h&}, sin6_port{l&,h&}, sin6_flowinfo%, \
|
|
\ sin6_addr&(15), sin6_scope_id%}
|
|
|
|
SYS `WSAStartup`, &202, WSAdata{} TO res%
|
|
IF res% ERROR 102, "WSAStartup failed"
|
|
|
|
addrinfo.ai_family% = AF_INET
|
|
SYS `getaddrinfo`, name$, 0, addrinfo{}, ^ipv4info{}+4 TO res%
|
|
IF res% ERROR 103, "getaddrinfo failed"
|
|
|
|
!(^sockaddr_in{}+4) = ipv4info.lp_ai_addr%
|
|
PRINT "IPv4 address = " ;
|
|
PRINT ;sockaddr_in.sin_addr&(0) "." sockaddr_in.sin_addr&(1) "." ;
|
|
PRINT ;sockaddr_in.sin_addr&(2) "." sockaddr_in.sin_addr&(3)
|
|
|
|
addrinfo.ai_family% = AF_INET6
|
|
SYS `getaddrinfo`, name$, 0, addrinfo{}, ^ipv6info{}+4 TO res%
|
|
IF res% ERROR 104, "getaddrinfo failed"
|
|
|
|
!(^sockaddr_in6{}+4) = ipv6info.lp_ai_addr%
|
|
PRINT "IPv6 address = " ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(0) * 256 + sockaddr_in6.sin6_addr&(1) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(2) * 256 + sockaddr_in6.sin6_addr&(3) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(4) * 256 + sockaddr_in6.sin6_addr&(5) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(6) * 256 + sockaddr_in6.sin6_addr&(7) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(8) * 256 + sockaddr_in6.sin6_addr&(9) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(10) * 256 + sockaddr_in6.sin6_addr&(11) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(12) * 256 + sockaddr_in6.sin6_addr&(13) ":" ;
|
|
PRINT ;~sockaddr_in6.sin6_addr&(14) * 256 + sockaddr_in6.sin6_addr&(15)
|
|
|
|
SYS `WSACleanup`
|