Syncthing not using multiple QUIC streams?


I was curious how Syncthing actually uses QUIC and multiple QUIC streams, but I could not find any trace of clever uses of streams. In fact the listener code seems to ever only accept a single stream. Similarly there is only one stream opened ever.

Doesn’t this downgrade QUIC to basically TCP like semantics? What are the advantages of using QUIC this way?

Honestly, I would expect TCP to be much more tuned for this single-stream use case and even exhibit better performance than QUIC here. In contrast HTTP/3 seems to open a QUIC stream per request.

Indeed we use QUIC just like a worse TCP. It’s not clear to me what we’d gain by multiple streams, but perhaps it would be better somehow. You’re welcome to experiment and PR. :slight_smile:

Edit: thinking a little further I guess the gain could be that packet loss on one request wouldn’t hold up another, which would be advantageous. Taking advantage of it would require some re-plumbing of the protocol package though.

1 Like