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.