· Sep 29, 2017

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


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?

Discussion (5)1
Log in or sign up to continue

You can use deprecated %Net.RemoteConnection:

Set rc=##class(%Net.RemoteConnection).%New()
Set Status=rc.Connect("","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.