Since the code base was already established and code reuse was encouraged, my main implementation problem is creating the kind of cache mechanism that I want. A large part of the work went into getting to know the implementation details of the framework well enough so that I could alter and add to the code where I wanted to.
The proxy is implemented as a single threaded application, that uses non-blocking systems calls to handle many clients at once. The proxy starts by initializing all variables and the cache table. This includes reading the latest cache state from disk, which allows for a graceful cache reboot after a crash. After that the proxy creates the listening socket.
Finally the proxy enters a non-exiting loop, described in pseudo code:
begin loop
create a client object for a connection request;
begin loop over all client objects
if the client wants to read/write then
use a netpipe to handle it;
update client state;
end loop
if idle then
flush cache to disk;
end loop