msg, result, remaining, handle = multi:InfoRead()
This call returns four values: msg contains the type of message received. This can be #CURLMSG_NONE or #CURLMSG_DONE.
result contains the message result. The remaining return value indicates how many messages are still in the queue after
this function was called. The handle return value contains the easy handle that has previously been added to the multi handle.
When you fetch a message using this function, it is removed from the internal queue so calling this function again will not return the same message again. It will instead return new messages at each new invoke until the queue is emptied.
When msg is #CURLMSG_DONE, the message identifies a transfer that is done, and then result contains the return code
for the easy handle that just completed.