Al leer otras entradas de desbordamiento de pila y la documentación boost::asio
, he confirmado que no hay llamadas de lectura/escritura ASIO síncronas que también proporcionan un tiempo de espera fácil de usar como parámetro para la llamada.C++ Boost ASIO: ¿cómo leer/escribir con un tiempo de espera?
Estoy en medio de la conversión de una aplicación de socket de Linux de la vieja escuela con llamadas selectivas (2) que emplean tiempos de espera, y tengo que hacer más o menos lo mismo.
¿Cuál es la mejor manera de hacer esto en boost::asio
? Si observamos la documentación de Asio, hay muchos ejemplos confusos de varias cosas que hacer con temporizadores, pero estoy bastante confundido.
Me encantaría ver un ejemplo fácil de leer de esto: Leer desde un socket, pero esperar un máximo de X segundos después de lo cual la función o regresa sin nada, o regresa con lo que fue capaz para leer desde el socket antes de que expire el tiempo de espera.
¿Puede explicar qué es confuso sobre este ejemplo: http://think-async.com/Asio/asio-1.4.7/src/examples/timeouts/blocking_tcp_client.cpp: la lógica esencial es enviar 2 tareas asíncronas, una lectura/escritura y la otra un tiempo de espera si la lectura/escritura regresa primero mata el temporizador de fecha límite, si el temporizador de la fecha de entrega regresa la lógica es la lectura/escritura sigue siendo excepcional, a partir de ahí se continúa con su lógica de tiempo de espera. muy muy simple. –
Hay un caso de esquina que podría surgir en la red hf que está relacionado con la puesta en cola de las devoluciones de llamada. el tiempo de espera cb está en cola, luego la lectura/escritura está en cola. te encuentras con el timeout cb y comienzas a ejecutar la lógica de tiempo de espera cuando en realidad la lectura/escritura se completó, una posible solución que he visto es algo similar al bloqueo de doble comprobación, en resumen, realizar un tiempo de espera secundario cuando regrese el primer tiempo de espera pero entonces esto tiene el mismo problema, ¿qué pasa si la lectura/escritura está en cola después de que el segundo tiempo de espera es la cola? –
Solo recuerda que un tiempo de espera es una condición difícil, estás diciendo que si no obtengo algo en cierta cantidad de tiempo, haré algo específico, esto incluye el hecho de que la lectura/escritura puede haber ocurrido y está en camino hacia ti, eso no cambia el hecho de que no la has recibido hasta el momento. –