Recommended Download

Other Available Downloads

Release Notes

1. Significant refactoring since the v1 release - code refactoring following modern C++ design patterns, facilitating better code-gen - code refactoring for 200+ unit tests for the core classes and functions - Refactoring effort to eliminate code inefficiencies, notably unnecessary copies and unnecessary Interlocked* operations (particularly on the IO path) enable better scalability across scenarios2. Unique connection identifiers for every connection - each connection shares a GUID identifier, printed by both client and server - requested by deployments behind NATs and load balancers which couldn't correlation purely from IP addresses3. More optimal server behavior - the server-side (listener) will no longer initiate a FIN - this models recommended server design, as initiating a FIN on a stream will put the socket in TIME_WAIT state, which holds up resources unnecessarily on the server - the server waits for the client to FIN or RST the connection (LINGER is still enabled to terminate if the client is no longer responsive)4. Clients have more control over stream closures with -Shutdown - clients can now control if they want a 4-way FIN closure, or directly RST the stream - this was important to allow modeling of various TCP scenarios5. -Verify setting is no longer required to be matched between clients and servers - clients and servers can now independently specify -Verify, if either wants to verify 'connection integrity' or 'data integrity' - with the v1 release, clients and server generally were required to have matching settings6. Updates to details of output information - error logs now have more details across a range of scenarios - closing banner includes more useful (requested) information7. Support for port-scalability and reuse-unicast-port - will automatically take advantage of new TCP stack behavior to reuse unicast ports when AutoReusePortRange* options are configured in the NetTCPSetting management option (via Powershell)8. -Buffer ranges provides more randomization for scenarios needing diverse workloads - buffer sizes are now randomized per IO within a connection, not a random value set for the lifetime of a connection9. More optimal and configurable Sending options - by default, instead of just keeping 1 send in flight at a time, will keep enough sends in flight to keep up with the indicated ideal send backlog for that connection - by following the ideal send backlog, senders can maximize the available bandwidth on a stream, allowing to scale up significantly in high bandwidth scenarios - can specify the number of sends to keep in flight directly with the -PrePostSends option10. Can override SO_RCVBUF and SO_SNDBUF when needed - while the default buffering is generally optimal (with auto tuning on by default), these are made available to recreating specific scenarios - can specify -RecvBufValue and -SendBufValue to set these socket options on TCP or UDP sockets