Posts from 2009
-
:
The new Microsoft File Transfer Manager appears to suck...
I’m downloading the Windows 7 Beta from MSDN Subscriber downloads right now and the new Microsoft File Transfer Manager appears to be very very crap. The MSDN site insisted on updating the file transfer component before I could … -
:
Living with Subversion
It’s now around a month since I started shifting the bulk of my source code from CVS to Subversion. In that time I’ve move most of my internal use code, and a couple of clients. I’ve done several client releases and … -
:
Breakpoint sequences...
Something that I find myself wanting in a debugger from time to time are breakpoints that only fire if the code has been entered via a specific route. You know the problem, you’ve tracked a particular issue down to one specific call … -
:
Bug in the dispatching of OnConnectionClosed() in release 5.2.4 of the server framework
A client has just reported a bug in version 5.2.4 of The Server Framework. The bug has, possibly, been present since 5.2.2 and relates to the dispatch of OnConnectionClosed() callbacks when a socket is released. If a socket is still valid, … -
:
Latest release of licensed socket server code: 5.2.5
The latest release of The Server Framework is now available. This release includes the following changes. The following changes were made to the libraries. Admin Library - 5.2.5 No Change. C++ Tools Library - 5.2.5 No Change. Win32 Tools … -
:
Asserts and testing
Miško Hevery over at the Google Testing Blog has a few things to say about Asserts and testing. He’s against asserts, specifically ones which perform null checks, as they get in the way of testing. Whilst I agree with his dislike of … -
:
Memory leak in SChannel SSL code
I’ve just had a memory leak in the SChannel SSL code reported by a client. It’s a fairly fundamental leak has highlighted an omission in the mock buffer allocators that I use to test this kind of code; it also highlights that … -
:
Testing SChannel code
I developed the new SChannel SSL adapter for The Server Framework in a mostly test driven style; a while ago I called this Just In Time Testing… It worked well and, to be honest, I couldn’t imagine developing code as complex as … -
:
Automatically pruning empty log files
The log file rotation code that I wrote a while back has been working well for several clients. Recently someone suggested that the design of their server’s logging meant that they tended to generate lots of useful information on … -
:
Latest release of licensed socket server code: 6.0
The latest release of The Server Framework is now available. This release includes the following changes. The following changes were made to the libraries. Admin Library - 6.0 Added back the Admin\VC6Compatibility directory with sal.h for … -
:
Highlights of the 6.0 server framework release
The latest, 6.0, release of The Server Framework is significant for me in several ways. From a purely practical point of view it’s the first release from my new Subversion repository and as such it’s the culmination of a fair … -
:
Excellent article on Non-Paged Pool
Mark Russinovich has an excellent piece (here) on how ’non-paged pool’ memory sizes are calculated for various versions of Windows operating systems. As those of you who are dealing with high performance, high connection, server … -
:
Upgrading to version 6.0
I’m in the process of upgrading a set of ISO8583 servers for a client. One of these is the original server that caused The Server Framework to come into existence back in 2002. The other two servers are based on a 2005 cut of the … -
:
Custom application servers
A lot of the custom development work that we do for our customers can be classified as developing ‘custom application servers’. Development for these kinds of servers usually requires that we design a wire-protocol for … -
:
Bug fix for the free server framework code
A user of my free server framework code has reported an error and supplied a fix. The problem is that he’s been having connections closing and returning ERROR_CONNECTION_ABORTED and the free code doesn’t handle this situation … -
:
Interesting piece on thread pools
Herb Sutter has just published an interesting article over at DDJ on correctly using thread pools: Use Thread Pools Correctly: Keep Tasks Short and Nonblocking. It’s not rocket science and it doesn’t deal with platform issues … -
:
May your software scale, and other curses...
I’m in the process of upgrading another client to v6.0. These guys write multi-user game systems and have a fairly complex CLR hosting custom application server. Anyway, I was hoping that we’d have a few easy performance wins … -
:
Everything you need to know about timers and periodic scheduling in the server framework
Often when you’re writing a server or client application with The Server Framework you will find yourself needing to perform operations periodically or after a timeout. The Server Framework provides a light-weight timer queue that can … -
:
Embedded assembly programming
Well, I’ve finally done something that I’ve been meaning to do for a long time. I’ve written some non-trivial assembly language code. Up until recently I wasn’t expecting this to be embedded assembly, but it actually … -
:
Building an inproc ATL COM object as x86 and x64
I’m currently wrapping a server’s client side API in an ATL COM object for a client. The COM object will be used to communicate with the server from managed code or VB or other COM compatible systems. It’s a fairly … -
:
#pragma unmanaged
I’ve just spent a little too long trying to track down a bug in a mixed mode DLL that I’m building. The DLL exposes a set of entry point functions that are defined as taking a single pointer argument and lies to the application … -
:
Bug fix in performance counter instance activation code
There’s a bug in all releases of our performance counter library that may cause the creation of an instance with a name that has been previously used as an instance but that has been released to fail by connecting the new instance to … -
:
Race condition during service shutdown
There’s a race condition in the service shutdown code which is most likely to show up if there’s an exception thrown from your implementation of ContinueService(), PauseService() or StopService() but that could show up during … -
:
Bug Psychology and how you can get stuck in a rut...
Eric Lippert has an interesting blog posting (here) on how sometimes you can be so focused on fixing the bug you fail to step back and take a better look at the actual problem that you’re trying to solve. I’m guilty of this and, … -
:
New Windows Services library
I’m currently working on a new version of the Windows Services library that ships as part of the licensed I/O Completion Port Server Framework. The Services library allows you to turn your server into a Windows Service very easily and … -
:
Why not to compile as 64 bit...
Here’s a nice piece by Rico Mariani about why Visual Studio is unlikely to go 64 bit any time soon. In a nut shell, unless you have very large data sets that need to be kept in memory you might be worse off as a 64 bit process than … -
:
Structured exception translation is now optional
I’ve had a couple of requests from clients recently that they be able to handle any structured exceptions in The Server Framework themselves. Up until now all framework threads install a SEH translator and catch the resulting C++ … -
:
Allocating page aligned buffers
Back in October 2007 I briefly looked at, what seemed to be at the time, a simple change to The Server Framework so that you had the option to use buffers that were aligned to page boundaries. This could help you scale better as one of the … -
:
Where's the catch(...)
As of the next release of The Server Framework use of catch(...) handlers at thread boundaries, in ’no throw’ functions and in destructors will be configurable. At present, in v6.0 and earlier of The Server Framework, we use … -
:
SSPI Negotiation; NTLM and Kerberos clients and servers
I’ve been working on a library that works in a similar way to our SChannel code and allows the use of the Microsoft “Negotiate” Security Support Provider Interface (SSPI) to provide NTLM and Kerberos support (see SPNEGO … -
:
Error: Cannot pass a GCHandle across AppDomains
I’m currently working on adding easy to use Real Time Data server support to my Managed XLL Excel Addin system. This lets you use the =RTD() functionality of Excel to push real time data into your spreadsheets without needing to … -
:
Asynchronous spreadsheet calls in a Managed XLL
Once I got the simple managed Real Time Data servers working in Excel I decided it was time to add asynchronous worksheet functions. This is the last major feature on my todo list and once it’s complete I’ll be ready to start … -
:
Globals are evil
Jamie Fristrom over at GameDevBlog thinks that “Globals are underrated”. I disagree, and, agree with most of the comments that Noel makes; globals and their 90’s equivalent, singletons, are evil. As anyone who has looked … -
:
A time and a place for comments
I’m fairly set in my ways about the value (or lack of) of comments in C++ code. I tend to have very few comments in my code and I tend to favour names and structure over comments; names and structure compiles and doesn’t lie. … -
:
Custom client/server request/response protocols
Quite often my customers use The Server Framework for both ends of their communication channels. The Server Framework has fully supported developing clients as well as servers for a long time now and although many of my customers build … -
:
Tracking invocations
The simple client/server request/response protocol that I’m currently harvesting uses the concept of an ‘invocation’ to tie a request to a response. An id is generated on the client and placed in the request header. The … -
:
Testing blocking calls
I’m developing the simple client server protocol code that I’m harvesting in a test driven manner. Although the code exists, as such, and I’m harvesting it rather than inventing it from scratch the harvesting is taking the … -
:
Downloading Windows 7
Since I complained about how the Microsoft File Transfer Manager sucked when I was downloading the Windows 7 Beta back in March I thought I should be balanced and point out that last night I kicked off a download of Windows 7 and the x86 … -
:
uuid.lib(unknwn_i.obj) : fatal error LNK1103: debugging information corrupt; recompile module
Back in October 2005 some of my clients started to complain that the latest version of the Platform SDK (the April 2005 version) broke their builds. The culprit was uuid.lib which had been built with debugging information that the VC6 … -
:
Using Wireshark to debug UDP communication issues
A customer of mine has been having some problems with communication between a UDP server and their load test client. The UDP server implements the ENet protocol which provides for reliable data transfer over UDP. Their problem was … -
:
Excel 2010 XLL SDK
I’m currently looking at the Excel 2010 XLL SDK which is part of the Office 2010 Technical Preview. I’ve already built and tested my managed XLL system with Excel 2010 on x86 but I needed the new XLL SDK to be able to build for … -
:
Tracking down reference counting bugs
The Server Framework uses reference counted data buffers and socket objects. These are passed around as part of the asynchronous I/O system in the framework and as they’re placed in queues or passed from one thread to another their … -
:
Using old compilers
By an interesting coincidence I happened to be searching for a few new C++ blogs to follow and I also happened to have just updated this entry about Stan Lippman’s VC6 rant (since I found a link to the original posting which had been … -
:
A week with Windows 7
I upgraded one of my build machines to Windows 7 almost a month ago now but I only managed to get around to doing my main developer machine at the start of this week. Apart from the fact that the Windows 7 in place upgrade failed on me, … -
:
Latest release of licensed socket server code: 6.1
The latest release of The Server Framework is now available. This release includes the following changes. The following changes were made to the libraries. Admin Library - 6.1 We now suppress warning 4370, ’layout of class has changed … -
:
Highlights of the 6.1 client/server framework release
The release notes for the 6.1 release, whilst complete, don’t really highlight the key points of this release. These are as follows: Support for SSPI Negotiate (NTLM and Kerberos) servers and clients - You can now license code which … -
:
Parasoft Insure++ vs Microfocus/Compuware DevPartner Studio
Has anyone got anything to say about the relative merits of Parasoft Insure++ vs the BoundsChecker parts of the Microfocus DevPartner Studio product? I’ve used BoundsChecker for a long time, and it has plenty of faults but the fact … -
:
Interesting Blog Posts on High Performance Servers
There are some interesting blog posts by Rick Vicik over on the Windows Server Performance Team Blog. Most interesting for me is part three of the three part series on “Designing Applications for High Performance”. Whilst parts … -
:
The equivalent of static libraries in .Net
I’m building my managed XLL tool in two versions, a ’normal user’ version and a ‘pro’ version. The ‘pro’ version has additional features that I don’t feel would necessarily appeal to all of my … -
:
Visual Studio 2010 Beta 2 installation failure
I’ve been having problems installing VS2010 Beta 2 onto a selection of x64 VMWare machines (fully updated and service packed XP and Windows 7). In fact I was having problems installing it onto any of them. The error that I was getting … -
:
Unit testing AVR assembly language
My “hobby project” is going well but the AVR assembly language that I’m writing has now got complex enough for me to really miss not having some form of unit testing framework in place. So I decided to remedy that I work … -
:
.Net 4.0 Hosting
I’ve been playing with Visual Studio 2010 Beta 2 and .Net 4.0, building code, running tests, playing with the IDE, etc. The first issue that I’ve come across with my existing codebase is that the .Net 2.0 hosting APIs (such as … -
:
Concurrency profiling with VS2010
I’m currently looking at the new concurrency profiling tools that come with Visual Studio 2010. It’s interesting and useful stuff. The tools provide what I have attempted to develop in the past by using API Hooking but … -
:
Bugs
It’s been a bit of a week for bugs. First I had a bug report for the really rather old CodeProject socket server COM object. This allows people using VB to create a socket server that uses the free version of The Server Framework. It … -
:
Talk to the bear
In the great tradition of explaining your problem to someone else as a way of fixing it yourself without their help… I’ve nailed the rotating file log 16010101 bug! The problem was to do with the fact that when there was a new … -
:
Latest release of licensed socket server code: 6.1.1
The latest release of The Server Framework is now available. This release includes the following changes. Note that this is mainly a bug fix release. The following changes were made to the libraries. Admin Library - 6.1.1 New build … -
:
Stream compression
Compressing TCP (and reliable UDP) streams is one of the things that often comes up in discussion with clients and I’ve helped several people implement stream compression using the TCP stream filtering API that’s part of The … -
:
An overview of features of the licensed Server Framework
The licensed version of my freely available I/O Completion Port based, high performance, Windows networking framework provides a whole host of features that the free code doesn’t; aside from performance improvements, bug fixes and an … -
:
.Net 4.0 Hosting (again)
As I mentioned a while back the CLR Hosting API has changed with .Net 4.0. The new API allows you much more flexibility in loading CLR runtimes and also allows you to load and run multiple different runtimes in a single process. Whilst this … -
:
Writing a custom Wireshark dissector plugin
I’ve been spending a little time recently writing a custom Wireshark dissector plugin for the UDT protocol. This didn’t prove to be that difficult once I got over the initial problem of actually getting the Wireshark source to … -
:
Datagram filtering
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 … -
:
Bug fix for obscure shutdown sequence race conditions
Charles Dickens said it best in A Tale of Two Cities; “It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was … -
:
DevPartner Studio 9.1
I’ve complained about DevPartner Studio enough in the past (here, here, here, etc.) that I thought I should write a positive blog posting since my recent experiences have been very positive. Some time ago I reported a bug in the …