Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Incorrect timeout

Aperta
#341 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
32/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
rust
Ambito
networking

Direzione di ricerca

Inizia riproducendo il comportamento segnalato con l'esempio Rust SSH dell'issue, variando timeout_ms e la durata del comando sleep remoto. Traccia il modo in cui il timeout della sessione viene applicato durante l'esecuzione del canale e verifica che il timeout osservato si verifichi al limite configurato anziché a un suo multiplo.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

When setting a session timeout, the behaviour seems incorrect! Consider this code that connects via ssh and runs sleep 30 && echo DONE to sleep for 30 seconds:

    let username = "...";
    let ip = "...";
    let password = "...";

    let timeout_ms = 15_000;
    let command = "sleep 30 && echo DONE"

    let tcp = std::net::TcpStream::connect(format!("{ip}:22"))?;
    let mut sess = Session::new()?;
    sess.set_timeout(timeout_ms);
    sess.set_tcp_stream(tcp);
    sess.handshake()?;
    sess.userauth_password(&username, &password)?;
    if !sess.authenticated() {
        return Err(anyhow!("Failed to connect by SSH"));
    }

    // Connect channel in exec mode.
    let mut channel = sess.channel_session()?;
    channel.handle_extended_data(ssh2::ExtendedData::Merge)?;
    println!("running command: {command}");
    channel.exec(command)?;
    let mut output = String::new();
    channel.read_to_string(&mut output)?;
    channel.close()?;
    channel.wait_close()?;
    let exit_status = channel.exit_status()?;

    sess.disconnect(
        Some(DisconnectCode::ByApplication),
        "Finished Running Script",
        None,
    )?;

    println!("SUCCESS");
    println!("exit code: {exit_status}");
    println!("output:\n{output}");

I expect the session to timeout after 15 seconds, but instead it times out after 30 seconds! If instead we have timeout_ms = 5_000 then it times out after 15 seconds. From my experimenting I think the current (unexpected) behaviour is as follows:

If the command blocks for duation t and t < timeout then return Ok
If the command blocks for duation t and t > 3*timeout then return a timeout error at time 3*timeout.
If the command blocks for duation t and timeout < t < 3*timeout_ms then return a timeout error at time t

I'm running on windows and with ssh2-0.9.4

Lingua principale
Rust
Stelle
571
Fork
166
Merge medio
1g 18h
PR unite (30g)
5

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di rust-lang/ssh2-rs

Tutte le issue di rust-lang/ssh2-rs

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.