On 2022-02-21 18:09, Mark Wieder via use-livecode wrote:
On 2/21/22 08:57, Mark Waddingham via use-livecode wrote:

If you want to brute force close all sockets then I suggest:


     repeat for each line i in the openSockets
       close socket i
     end repeat

:)

Yeah, that's what I'm doing now since resetall doesn't do anything
useful. Displaying the opensockets after a resetall still shows the
same sockets as before issuing the command.

And the repeat loop works maybe 50% of the time. It seems that maybe
if I have an active blocking read on a socket it doesn't get closed.
Could that be the case?

So I think there's something else going on in your scripts (or in the environment!) as from what I can see...

When `close socket` is performed, the socket is marked as `closing`, and `the openSockets` never includes sockets which are marked as `closing`.

The closing flag on a socket is only ever changed in two places - on socket creation/open, when it is set to false, and then on `close socket` where it is set to true.

Put another way - if you have done 'close socket i', then it is then it should be logically impossible for i to be in the openSockets immediately afterwards.

i.e. Based on my reading of the engine code:

  get line 1 of the openSockets
  close socket it
  put it is among the line of the openSockets

Will always put false.

Of course, it is possible after closing a socket, and if the event loop has run for a handler to have opened the same socket again (bearing in mind sockets are named for their address and port; unless an explicit tag is provided)...

Warmest Regards,

Mark.

--
Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to