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