Some debugging in the server code seems to have confirmed that we in fact wrote 3145729 bytes through the SSL_write_ex call, but the client still received 3147207 bytes.
Some additional debugging, in which I modified the interop runner harness to write sequential data into the file to download (I filled the file with a series of sequential values followed by a newline) led to an identification of the differences in the file that was sent and the file that was received:
From the diff it appears that, periodically, chunks of data within the stream get sent a second time over the wire.
Need to investigate the root cause and fix it. The error might be in the server code itself, but it doesn't appear so to me. I think the issue is a race condition in the reactor consuming bytes from the stream map with updates to the stream map from the application, but I've not looked closely enough yet
In attempting to build out QUIC server testing using the quic-interop-runner, I have written a demo server here: https://github.com/nhorman/openssl/blob/quic-server-interop/demos/guide/quic-hq-interop-server.c
When running several tests with openssl specified as a server, a number of them failed indicating:
Some debugging in the server code seems to have confirmed that we in fact wrote 3145729 bytes through the SSL_write_ex call, but the client still received 3147207 bytes.
Some additional debugging, in which I modified the interop runner harness to write sequential data into the file to download (I filled the file with a series of sequential values followed by a newline) led to an identification of the differences in the file that was sent and the file that was received:
From the diff it appears that, periodically, chunks of data within the stream get sent a second time over the wire.
Need to investigate the root cause and fix it. The error might be in the server code itself, but it doesn't appear so to me. I think the issue is a race condition in the reactor consuming bytes from the stream map with updates to the stream map from the application, but I've not looked closely enough yet