Bezeichnung
multi:SocketAction -- liest/schreibt verfügbare Daten bei einer Aktion
Übersicht
running = multi:SocketAction(socket, mask)
Beschreibung
Wenn die Anwendung eine Aktion für einen von libcurl behandelten Socket erkannt hat, sollte sie 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.

Eingaben
socket
zu verwendender Socket
mask
zu verwendende Maske
Rückgabewerte
running
Anzahl der laufenden Zugriffe

Navigation zeigen