Pregunta

Estoy un poco confundido sobre el comportamiento de QTcpSocket::waitForBytesWritten() . ..

Hasta cuando se hace este bloque de función?

  • Hasta que los datos se escriben en el buffer interno del sistema operativo para la transmisión a través de TCP?
  • Hasta que los datos se convierten físicamente a los paquetes TCP y envió?
  • Hasta que todos los datos se transmiten y el cliente remoto reconoce que se han recibido todos los paquetes?

Me miró a la documentación, pero no parece ser muy clara.

¿Fue útil?

Solución

sistemas operativos En términos generales sólo proporcionan APIs fáciles para la primera pregunta - desde Qt es una API portátil, lo mejor es sólo para confiar en ella se hace referencia a la transferencia de la memoria intermedia del sistema operativo. Si necesita un reconocimiento real de recepción, lo mejor es que le sea enviada por la aplicación remota -. Después de todo, los datos pueden ser ack'd mediante el mando a distancia, pero nunca leen en el sistema operativo del control remoto leer el búfer

Si tiene que evitar que el bloque de lado remoto para siempre, en su lugar debe esperar a que el QIODevice::bytesWritten señal y vuelta al bucle de eventos para hacer otros trabajos, o simplemente establecer un tiempo de espera adecuado. En general, el lado remoto puede bloquear siempre que en algún nivel - es decir, puede negarse a ACK, llenar su memoria intermedia sistema operativo local, en la que las escrituras de punto no lo harán a partir de Qt para el sistema operativo; No importa qué nivel se encuentra en waitForBytesWritten(), siempre se puede bloquear.

Como tal, bytesWritten y waitForBytesWritten() sólo se debe usar para estrangular la fuente de los datos - es decir, si usted fuera a entrar en un bucle estrecho que pasa 1G de datos para la toma de una sola vez, que podría terminar amortiguando en el proceso y salir corriendo de la memoria. Mediante la activación adicional lee / escribe con la señal bytesWritten, puede evitar este problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top