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.

boost.asio + native windows sockets boost.asio es una biblioteca de programación en C++ que proporciona una interfaz orientada a objetos para programar aplicaciones de red y E/S asíncronas de alta calidad. Esta biblioteca se integra perfectamente con los sockets nativos de Windows, lo que permite a los desarrolladores crear aplicaciones de red eficientes y escalables en entornos Windows.

Tenemos un marco de trabajo que se comunica a través de sockets nativos de WinAPI (WSASend, CompletionPorts, etc) mediante TCP.

Recientemente, hemos agregado algunas clases a este marco de trabajo que también envían y reciben mensajes de forma asíncrona mediante UDP, pero estas clases utilizan Boost.ASIO (io_context, etc).

Desde entonces, hemos observado que la función ‘connect’ de WinSocks falla con el siguiente error:

El intento de conexión falló porque la parte conectada no respondió adecuadamente después de un período de tiempo, o la conexión establecida falló porque el host conectado no respondió. El hilo 0x3038 ha finalizado con el código 0 (0x0).

Esto solo ocurre cuando se conecta a una computadora remota, no localmente.
Cuando volvemos a una versión anterior sin estas clases de Boost, todo funciona bien (descartando problemas con el cortafuegos).
Cuando se usan las clases de Boost.ASIO fuera del marco de trabajo, funcionan correctamente.

No estamos seguros de qué causa este problema. Mi intuición es que se trata de un conflicto a nivel del sistema operativo entre winsock y boost.ASIO.

¿Alguien ha experimentado algo similar? Agradeceríamos cualquier idea o indicación.

Ben

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un conflicto entre los sockets nativos de WinAPI y Boost.ASIO al utilizar los protocolos TCP y UDP en el mismo framework. El mensaje de error sugiere que el intento de conexión se está agotando o fallando debido a un host no responsive, lo cual podría ser causado por diversos problemas como la latencia de la red o una configuración incorrecta.

    Una posible solución podría ser intentar utilizar solo un protocolo (ya sea TCP o UDP) en el framework para ver si el problema persiste. Alternativamente, podría ser útil investigar la configuración de los sockets de WinAPI y Boost.ASIO para asegurarse de que no estén entrando en conflicto entre sí.

    También puede ser útil revisar cualquier cambio reciente en el framework o en el entorno de la red que pueda estar contribuyendo a este problema. En general, es importante recopilar más información y realizar pruebas adicionales para identificar la causa raíz del problema.

Comments are closed.