* by josh@jassing.com * with LOTS of help from (actually; all the hard work by) Markus Voellmy * * ?ping("jassing.com",80) would check jassing.com to be sure it's running a web server * NOTE: it does not do any dns lookups; so if you're checking for a mail server, you need * to resolve the mx record yourself. #DEFINE sckClosed 0 #DEFINE sckOpen 1 #DEFINE sckListening 2 #DEFINE sckConnectionPending 3 #DEFINE sckResolvingHost 4 #DEFINE sckHostResolved 5 #DEFINE sckConnecting 6 #DEFINE sckConnected 7 #DEFINE sckClosing 8 #DEFINE sckError 9 LPARAM tcServer LOCAL lnState, loPing, lnLast tnPort = 80 *!* DECLARE INTEGER OutputDebugString ; *!* IN kernel32 ; *!* AS dbgout; *!* STRING cString LOCAL llResult llResult = .t. loPing=CREATEOBJECT("mswinsock.winsock") WITH loPing .remoteport = tnPort .remotehost = tcServer .CONNECT() lnLast = -1 DO WHILE .state < sckConnected IF lnLast # .state * dbgout( "Ping State: "+PingState( .state )) *? "Ping State: "+PingState( .state ) lnLast = .state ENDIF ENDDO * dbgout( "Ping State: "+PingState( .state )) *? "Ping State: "+PingState( .state ) lnState = .state .CLOSE() * dbgout("Ping State: "+PingState(.state)) *? "Ping State: "+PingState( .state ) ENDWITH RETURN lnState#9 FUNC PingState LPARAM tnState LOCAL lcState DO CASE CASE tnState = sckClosed lcState = "Closed" CASE tnState = sckOpen lcState = "Open" CASE tnState = sckListening lcState = "Listening" CASE tnState = sckConnectionPending lcState = "Waiting" CASE tnState = sckResolvingHost lcState = "Resolving" CASE tnState = sckConnecting lcState = "Connecting" CASE tnState = sckConnected lcState = "Connected" CASE tnState = sckClosing lcState = "Closing" CASE tnState = sckError lcState = "Error" OTHERWISE lcState = "Unknown" ENDCASE RETURN lcState