See also:
#DEFINE AF_INET 2
#DEFINE NI_MAXHOST 1025
#DEFINE NI_MAXSERV 32
#DEFINE NI_NOFQDN 1
#DEFINE NI_NUMERICHOST 2
#DEFINE NI_NAMEREQD 4
#DEFINE NI_NUMERICSERV 8
#DEFINE NI_DGRAM 0x16
DO declare
IF NOT InitWinsock()
MESSAGEBOX("Winsock Library initialization failed!",;
48, "Error")
RETURN
ENDIF
LOCAL cSocaddrIn, cHostName, cServiceName,;
cIpAddress, nPort, nFlags, nResult
* 21 = ftp
* 25 = smtp
* 80 = hhtp
* 110 = pop3
* 443 = https
cIpAddress = "212.58.244.67"
nPort = 80
nFlags = NI_NAMEREQD
cHostName = REPLICATE(CHR(0), NI_MAXHOST)
cServiceName = REPLICATE(CHR(0), NI_MAXSERV)
cSocaddrIn = GetSocaddrIn(cIpAddress, nPort)
nResult = getnameinfo(@cSocaddrIn, LEN(cSocaddrIn),;
@cHostName, NI_MAXHOST,;
@cServiceName, NI_MAXSERV,;
nFlags)
IF nResult = 0
cHostName = STRTRAN(cHostName, CHR(0), "")
cServiceName = STRTRAN(cServiceName, CHR(0), "")
? cHostName
? cServiceName
ELSE
* WSANO_DATA = 1104 : The requested name is valid,
* but does not have an Internet IP address at the name server.
? "Winsock error:", WSAGetLastError()
ENDIF
= WSACleanup()
* end of main
FUNCTION InitWinsock
#DEFINE WSADATA_SIZE 398
#DEFINE WS_VERSION 0x0202
DECLARE INTEGER WSAStartup IN ws2_32;
INTEGER wVerRq, STRING @lpWSAData
LOCAL cWSADATAln, nInitResult
cWSADATA = REPLICATE(CHR(0), WSADATA_SIZE)
nInitResult = WSAStartup(WS_VERSION, @cWSADATA)
RETURN (nInitResult=0)
FUNCTION GetSocaddrIn(cIP As String,;
nPort As Number) As String
LOCAL cBuffer, cPort, cHost
cPort = num2word(BitClear(htons(nPort),16))
cHost = num2dword(inet_addr(cIP))
RETURN num2word(AF_INET) + m.cPort +;
m.cHost + REPLICATE(CHR(0),8)
PROCEDURE declare
DECLARE INTEGER inet_addr IN ws2_32 STRING cp
DECLARE INTEGER htons IN ws2_32 INTEGER hostshort
DECLARE INTEGER WSACleanup IN ws2_32
DECLARE INTEGER WSAGetLastError IN ws2_32
DECLARE INTEGER getnameinfo IN ws2_32;
STRING @sockaddr, INTEGER salen,;
STRING @host, LONG hostlen,;
STRING @serv, LONG servlen,;
INTEGER procFlags
FUNCTION num2dword(lnValue)
#DEFINE m0 0x0000100
#DEFINE m1 0x0010000
#DEFINE m2 0x1000000
IF lnValue < 0
lnValue = 0x100000000 + lnValue
ENDIF
LOCAL b0, b1, b2, b3
b3 = Int(lnValue/m2)
b2 = Int((lnValue - b3*m2)/m1)
b1 = Int((lnValue - b3*m2 - b2*m1)/m0)
b0 = Mod(lnValue, m0)
RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)
FUNCTION num2word(lnValue)
RETURN Chr(MOD(m.lnValue,256)) + CHR(INT(m.lnValue/256))
WSACleanup
WSAGetLastError
WSAStartup
getnameinfo
htons
inet_addr
The getnameinfo function deprecates the gethostbyaddr function.