running = multi:SocketAction(socket, mask)
multi:SocketAction() aufrufen, wobei das Argument socket
auf den Socket mit der Aktion festgelegt ist. Wenn die Ereignisse auf einem
Socket bekannt sind, können sie als Ereignisbitmaske maske übergeben werden,
indem zuerst maske auf 0 gesetzt und dann mit bitweisem ODER (|) eine beliebige
Kombination von Ereignissen hinzugefügt wird, die aus #CURL_CSELECT_IN,
#CURL_CSELECT_OUT oder #CURL_CSELECT_ERR ausgewählt werden soll. Wenn die
Ereignisse an einem Socket unbekannt sind, übergeben Sie stattdessen 0, und
libcurl testet den Deskriptor intern. Es ist auch zulässig, #CURL_SOCKET_TIMEOUT
an den Parameter socket zu übergeben, um den gesamten Prozess einzuleiten oder
wenn eine Zeitüberschreitung auftritt.
Bei der Rückkehr enthält running die Anzahl der laufenden Easy-Handle
innerhalb des Multi-Handle. Wenn diese Zahl Null erreicht, sind alle
Übertragungen abgeschlossen. Wenn Sie multi:SocketAction() auf einem
bestimmten Socket aufrufen und der Zähler um eins abnimmt, bedeutet das NICHT
unbedingt, dass dieser genau Socket/Transfer derjenige ist, der abgeschlossen
wurde. Verwenden Sie multi:InfoRead(), um herauszufinden, welcher
Easy-Handle das erledigt hat.
Der Befehl multi:SocketAction() informiert die Anwendung über
Aktualisierungen des Socket-Status (Dateideskriptor), indem sie keine,
einen oder mehrere Aufrufe der Socket-Callback-Funktion ausführen, die
mit der Option #CURLMOPT_SOCKETFUNCTION auf multi:SetOpt() gesetzt
wurde. Sie aktualisieren den Status mit Änderungen seit dem letzten
Aufruf des Callbacks.
Rufen Sie die Timeout-Zeit ab, indem Sie die Option #CURLMOPT_TIMERFUNCTION
mit multi:SetOpt() setzen. Ihre
Anwendung wird dann mit der Information aufgerufen, wie lange Sie
höchstens auf Socket-Aktionen warten müssen, bevor Sie die
Zeitüberschreitungs-Aktion durchführen: Rufen Sie den Befehl
multi:SocketAction() mit dem Argument socket auf, das auf
#CURL_SOCKET_TIMEOUT gesetzt ist. Sie können auch den Befehl
multi:Timeout() aufrufen, um den Wert zu einem bestimmten
Zeitpunkt abzufragen. Aber für ein ereignisbasiertes System, das den
Callback verwendet, ist viel besser, als sich auf die Abfrage des
Zeitüberschreitungs-Wertes zu verlassen.