Given an IP Address and Port # is there any way to verify connectivity from within Cache?

Hi-

I have an IP address (or hostname) and a port (in this case a super server port #) and I want to try to verify that network communications can be established between the host I'm on and the given hostname and port number of a remote server.

Is there any way pragmatically to do this within Cache?

  • 0
  • 0
  • 592
  • 3
  • 2

Answers

You can use deprecated %Net.RemoteConnection:

Set rc=##class(%Net.RemoteConnection).%New()
Set Status=rc.Connect("127.0.0.1","SAMPLES",1972,"_SYSTEM","SYS")
Write Status

If you don't know login/pass just use _SYSTEM/SYS defaults - you'll get either Access Denied error upon successful connection or TCP error.

Alternatively try to open TCP device to the target:

ClassMethod Test(host = "localhost", port = 1972, timeout = 10) As %Boolean {
      set oldIO = $IO
      set io = "|TCP|1" _ port
      open io:(/Hostname=host:/Port=port):timeout
      set success = $Test
      use oldIO
      close io
      quit success
}

It all depends.

Attempts to connect a port or even to connect a super-server using potentially wrong password spoil Cache Audit with nasty records, so if they are done frequently those records can easilly overfill the Audit.

Several years ago I faced the similar problem in opposite direction: how to let load balancer recognize Cache instances which are no longer alive to remove them from its list. Load balancer was to distribute super-server connections as well as web based ones. The idea of polling 1972/tcp was dropped as soon as I recognized its impact on auditting. So I used a web app which allowed unauthenticated access for the simple reason that if 57772/tcp port had reasonably answered, 1972/tcp should be accessible as well. There were no firewall(s) between the load balancer and application servers, therefore I was sure that there were no external "forces" that could prevent them from answering. The solution was deployed on a couple of different load balancers and showed its robustness on a farm of 4-7 application servers and 1000-3000 concurrent users.

Only the web app's home page was requested, without any attempt to log on, so it didn't write any audit record. In contrast, any attempt to connect 1972/tcp always wrote a "Logon Failure" record described as "Authentication broken" or something like this.

Comments

Can't you use telnet to verify this?

Or maybe use OPEN "TCP:5000":("Hostname":Port) :5

Then check for $TEST and if it's 1 then the connection was successful.