The filtering API that’s built into the stream (i.e. TCP) side of the licensed framework is pretty powerful. It’s what the OpenSSL, SChannel and SSPI Negotiate filters use to transform the data as it flows into and out of your server without you needing to do anything special; it’s what the flow control filter uses to provide efficient TCP window based flow control; it’s what the compression filter uses to compress your data stream; it’s what the read timeout filter uses to provide you with asynchronous read timeouts on overlapped I/O and what the connection re-establishment filter uses to automatically reconnect if your connection goes down. All in all it’s pretty powerful stuff that makes it easy to build a data stream with just the features that you need by simply pushing filters onto your connection.
The downside is that it’s only available on stream sockets. Well, that will soon change. Right now I’m working on adding a datagram version of the filtering API. This will work in a similar way to the stream filters but since the data flowing is, at present, unreliable (UDP being the only datagram protocol that we currently support) the filters will be limited to doing things that don’t require state from previous datagrams; so compression using the ZLib compression filter will be fine, but encryption using SSL wont be. The first filters available for the datagram filter API will be compression and a Carmack unreliable delta ‘reliable’ data transfer protocol.
Datagram filtering will be available in release 6.2 which currently doesn’t have a release date but which should be available in the first quarter of 2010.