En general, los sistemas operativos solo proporcionan API fáciles para la primera pregunta, ya que Qt es una API portátil, lo mejor es confiar únicamente en la transferencia al búfer del SO. Si necesita un acuse de recibo real, es mejor que lo envíe la aplicación remota; después de todo, los datos pueden ser capturados por el control remoto, pero nunca leen el búfer de lectura del sistema operativo remoto.
Si necesita evitar que el control remoto le bloquee para siempre, en su lugar debe esperar la señal QIODevice::bytesWritten
y volver al bucle de eventos para realizar otro trabajo, o simplemente establecer un tiempo de espera adecuado. En general, el lado remoto siempre puede bloquearlo en algún nivel, es decir, puede negarse a responder, llenando su búfer de sistema operativo local, en cuyo momento las escrituras no pasarán de Qt al sistema operativo; no importa en qué nivel esté waitForBytesWritten()
, siempre se puede bloquear.
Como tal, bytesWritten
y waitForBytesWritten()
sólo se debería 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 se en el proceso y quedando sin memoria. Al activar lecturas/escrituras adicionales con la señal bytesWritten
, puede evitar este problema.
No necesito acuse de recibo. Lo que * realmente * quiero es evitar la situación en la que un cliente puede retrasar la aplicación esperando a enviar el ACK. –
@George: respuesta actualizada :) – bdonlan