Taking a look at this again, I did some more research into QoS on Windows:
- Windows support for QoS is documented here: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374094(v=vs.85).aspx
- There are a couple of ways to go here when implementing QoS:
- You can set the DS field directly on a socket.
- You can use the Traffic Control API.
- You can use the (relatively) new qWAVE API (introduced in Vista) to set QoS: https://msdn.microsoft.com/en-us/library/windows/desktop/aa374102(v=vs.85).aspx
- This uses 802.1p (layer 3) and DSCP (layer 2) to control traffic flow.
- It's intended to be set by a streaming server for media playback purposes, but may work for general purpose QoS.
- I'm moving all of the providers that use HTTP to use .NET's HttpWebRequest/HttpWebResponse (Azure / Amazon S3 still don't).
- Those are standard .NET classes, and unfortunately can't be extended in such a way that enables QoS.
- In order to use any of the above techniques we would essentially need to extract .NET's HTTP processing code and modify it, or use a different HTTP library or API.
- We would essentially fork .NET into our own library, which means any new features and fixes in future .NET versions would not apply to us.
- This is far from ideal.
Basically, I don't see how we can practically implement this.