Ich benutze libssh.
Nach dem Aufruf ssh_channel_write
, muss ich wissen, ob es Daten zum Lesen gibt. (Aber ich möchte keine Daten abrufen.)
Wenn es keine Daten zum Lesen gibt (zum Beispiel nach 10s), werde ich wieder ssh_channel_write
aufrufen.
Beide von ssh_channel_read
und ssh_channel_read_nonblocking
können dies nicht tun. (Und die Überprüfung ssh_get_status
mit SSH_READ_PENDING funktioniert auch nicht.)
Gibt es Möglichkeiten, dieses Problem zu lösen?libssh woher weiß ich, ob dort Daten zu lesen sind?
2
A
Antwort
1
Es ist NonBlocking ...
Verwenden Sie die ssh_select (Funktion). Es funktioniert ganz ähnlich wie das reguläre select(), verwendet aber Kanäle anstelle von Sockets.
ssh_select int (* ssh_channel Kanäle, ssh_channel * outchannels, socket_t maxfd, fd_set readfds *, struct timeval * timeout);
Zum Beispiel kann eine Einkanal-Implementierung:
ssh_channel channels[2];
ssh_channel myChannel = ssh_channel_new (ssh_session session);
channels[0] = myChannel;
channels[1] = NULL;
struct timeval timeout = (0, 200000); // 0 seconds, 200 millis
int rc = ssh_select (channels, NULL, NULL, NULL, &timeout);
if (rc > 0) {// There is a pending data.
if (rc < 0) // the ssh_select() error.
if (rc == 0) // You've got a broken connection.
Verwandte Themen
- 1. Woher weiß man, ob alle JavaScript-Objektwerte wahr sind?
- 2. Woher weiß ich, ob meine App mit Robolectric läuft?
- 3. Woher weiß ich, ob eine Website Iframes akzeptiert?
- 4. Woher weiß man, wenn zu viele Logging-Nachrichten vorhanden sind?
- 5. Woher weiß ich, ob die Anfrage von Flash SWF kam?
- 6. jquery: woher weiß ich ob ich es habe?
- 7. Woher weiß ich, ob ein System eingeschaltet ist?
- 8. Woher weiß ich, ob ich eine verschachtelte Shell ausführe?
- 9. Woher weiß ich, ob ein BigDecimal nicht analysiert werden konnte?
- 10. HTML - Woher weiß ich, wenn alle Bilder geladen sind?
- 11. Woher weiß ich, ob ich vom GAC laufe oder nicht?
- 12. Woher weiß ich, ob ich kopieren oder verschieben?
- 13. Woher weiß ich, ob sich eine "Versammlung" tatsächlich geändert hat?
- 14. Woher weiß ich, ob die Verbindung mit Websockets besteht?
- 15. Woher weiß ich, ob Tabellenkalkulationsfelder mithilfe des Google Apps-Skripts
- 16. Woher weiß ich, ob dies zufällig genug ist?
- 17. Woher weiß ich, ob das richtige .NET Framework installiert ist?
- 18. Woher weiß ich, ob ein WPF-Fenster geöffnet ist?
- 19. Woher weiß ich, ob ein Bash-Skript mit nohup läuft?
- 20. Woher weiß ich, ob mein Programm MDAC benötigt?
- 21. Woher weiß ich, ob die Django-Modellinstanz geändert wurde?
- 22. Woher weiß ich, ob ein Sound auf Android beendet ist?
- 23. Woher weiß ich, ob die beiden Zellen zusammengeführt werden?
- 24. Woher weiß ich, ob Java Stream sammeln (Collectors.toMap) parallelisiert ist?
- 25. Woher weiß ich, ob mein Browser SVG 2.0 unterstützt?
- 26. Woher weiß ich, ob GL_OES_standard_derivatives vom Gerät unterstützt wird?
- 27. Woher weiß ich, ob jQuery eine Ajax-Anforderung ausstehend hat?
- 28. Woher weiß ich, ob auf einem Server JSONP aktiviert ist?
- 29. Woher weiß ich, ob mein Server NUMA hat?
- 30. C# process.start, woher weiß ich, ob der Prozess beendet wurde?
tatsächlich, ich 'ssh_channel_read_nonblocking' diese Arbeit endlich zu tun. – Caesar