es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La conexión se agota con el código de error 110 incluso antes de que se complete el tiempo al realizar una llamada de websocket.

Quiero realizar una llamada WebSocket en Rust pero el código está lanzando un TransportError:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Transport(Error when opening the TCP socket: Connection timed out (os error 110))', src/main.rs:20:10

Verifiqué mi instancia de Vultr y no tiene un firewall habilitado.

Mi código establece un tiempo de espera para la conexión:

use jsonrpsee_ws_client::WsClientBuilder;
use std::time::Duration;
use subxt::ClientBuilder;

#[subxt::subxt(runtime_metadata_path = “polkadot_metadata.scale”)]
pub mod polkadot {}

#[async_std::main]
async fn main() -> Result<(), Box> {
env_logger::init();
// let connection_timeout_secs = Duration::new(secs: 60, nanos: 0);
let connection_timeout_duration = Duration::new(600, 0);

let url = “wss://moonriver.api.onfinality.io:9944/public-ws”;

let client = WsClientBuilder::default()
.connection_timeout(connection_timeout_duration)
.build(url)
.await
.unwrap();

let api = ClientBuilder::new()
.set_client(client)
// .set_url(“wss://pub.elara.patract.io:9944/statemine”)
.build()
.await?
.to_runtime_api::<>>();

let mut iter = api.storage().system().account_iter(None).await?;

while let Some((key, account)) = iter.next().await? {
println!(“{}: {}”, hex::encode(key), account.data.free);
}
Ok(())
}
“`

Establecí un temporizador y en lugar de 10 minutos, el error se produjo en 6-7 minutos. Esto me hace pensar que no es un error de tiempo de espera real, sino algo más, como la configuración de la red. Pero me aseguré de que no haya un firewall habilitado desde el Vultr UI.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error, parece que el código de Rust no logra establecer una conexión de socket TCP dentro del tiempo de espera especificado, lo que indica un posible problema de conectividad de red.

    Una posible solución es verificar si el punto final WebSocket objetivo está en funcionamiento intentando conectarse a él utilizando una herramienta diferente, como curl o telnet, desde la máquina anfitriona.

    Otro enfoque es aumentar la duración del tiempo de espera de conexión para ver si eso ayuda a establecer la conexión correctamente. También es recomendable envolver el resultado del bloque asíncrono con un tipo de resultado que produzca un mensaje de error personalizado en lugar de provocar un pánico con una llamada a unwrap.

    Si ninguna de las soluciones anteriores resuelve el error de transporte, puede ser útil investigar la configuración de red tanto en el cliente como en el servidor para ver si hay bloqueos, políticas o configuraciones que puedan estar causando el problema.

Comments are closed.