Sorry, I misread your code
My code? I suppose you mean GrandFather code in Re: Correct way to use Net:SSH2 module
if I connect with shell instead of exec would I be correct in saying there is no way to tell when the end of the response has been received?
Yes, if you run a shell, you have to use some heuristic as looking for the prompt or delaying for a while to detect or ensure that the command is done.
why does a poll time of 500ms work perfectly well with a command like "ls;sleep 5;ls;"? When I reduce the poll time to 100ms it times out
Because that code is broken!
As the SSH object is not set to work in non-blocking mode, once some data becomes available in the channel the code gets stuck in the inner loop where read is called until the channel is closed by the remote side. Then, it runs again the outer loop where it gets the channel_closed event and exits.
When the timeout is set to 100ms, sometimes it will expire before any data from the first ls command arrives and so never entering the inner loop.