Rhino.compute throwing an error every hour or so

I’m running rhino.compute in an EC2 t2.micro instance with AMI Windows 2019.

I launch rhino.compute by executing compute.geometry.exe manually. It seems to be performing well, but it throws and error every hour or so, but does not kill the process.

I don’t believe it behaved like this before I tightened my inbound security rules. I think I’m using the rules specified in the install instructions, except that I limit incoming HTTP 80 to a single internal IP address.

I’ve included the log file below, showing successful 200 returns surrounding the errors.

Any idea what this could be.

Thanks,
Bill

=========================================================

[02:59:48 INF] Compute 1.0.0.1209, Rhino 7.13.21348.13001
[02:59:48 INF] Configuration Result:
[Success] Name compute.geometry
[Success] DisplayName rhino.compute
[Success] Description rhino.compute
[Success] ServiceName compute.geometry
[02:59:48 INF] Topshelf v4.1.0.172, .NET Framework v4.0.30319.42000
[02:59:48 INF] Launching RhinoCore library as Administrator
[03:00:05 INF] Starting listener(s): [“http://+:80”]
[03:00:08 INF] (1/2) Loading grasshopper
[03:00:16 INF] (2/2) Loading compute plug-ins
[03:00:17 INF] Listening on [“http://+:80”]
[03:00:17 INF] The compute.geometry service is now running, press Control+C to exit.
172.31.11.182 - [2021-12-23T03:00:27.3901605+00:00] “POST /grasshopper HTTP/1.1” 200 -
172.31.11.182 - [2021-12-23T03:57:09.9568376+00:00] “POST /grasshopper HTTP/1.1” 200 -
12/23/2021 5:20:36 AM|Fatal|<>c__DisplayClass9.b__8|System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. —> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
— End of inner exception stack trace —
at System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
at WebSocketSharp.Ext.<>c__DisplayClass9.b__8(IAsyncResult ar)
12/23/2021 6:33:41 AM|Fatal|<>c__DisplayClass9.b__8|System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. —> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
— End of inner exception stack trace —
at System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
at WebSocketSharp.Ext.<>c__DisplayClass9.b__8(IAsyncResult ar)
12/23/2021 7:34:15 AM|Fatal|<>c__DisplayClass9.b__8|System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. —> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
— End of inner exception stack trace —
at System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
at WebSocketSharp.Ext.<>c__DisplayClass9.b__8(IAsyncResult ar)
12/23/2021 7:45:34 AM|Fatal|<>c__DisplayClass9.b__8|WebSocketSharp.WebSocketException: The header of a frame cannot be read from the stream.
at WebSocketSharp.WebSocketFrame.processHeader(Byte header)
at WebSocketSharp.WebSocketFrame.<>c__DisplayClassa.b__9(Byte bytes)
at WebSocketSharp.Ext.<>c__DisplayClass9.b__8(IAsyncResult ar)
12/23/2021 10:13:50 AM|Fatal|<>c__DisplayClass9.b__8|System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. —> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
— End of inner exception stack trace —
at System.Net.Security._SslStream.EndRead(IAsyncResult asyncResult)
at WebSocketSharp.Ext.<>c__DisplayClass9.b__8(IAsyncResult ar)
172.31.11.182 - [2021-12-23T11:25:35.6419755+00:00] “POST /grasshopper HTTP/1.1” 200 -

Moved to Compute category

@will do we use WebSocketSharp for licensing code?

This may be a clue:

I added a Health Check in AWS, which pings compute.geometry with a “…/version” request approximately every 10 seconds.

I haven’t see the WebSocket error in 12 hours of continuous uptime.

@BillO Is the question above related to the your other thread: Logging options or best endpoint for health check?

Not really.

Coincidentally, they happen to be loosely related. When I perform health checks, so that Compute is touched every few seconds, the error in this topic goes away.

We do, for Cloud Zoo. I can try to track this down, but I don’t think it’s quite as serious as the “fatal” log level makes it sound.