1) Accept configuration from a file using the -c option to specify the file location. The file sytax will be something like: # tproxy configuration. Transparent = yes ForceURL = http://www.domain.com/ ServerPort = 81 ServerForeground = yes ServerBindIp = 192.168.0.1 RunAs = nobody AllowIp = 192.168.0.0/24 AllowIp = 192.168.1.0/24 AllowIp = 192.168.2.1 LogFile = /var/log/tproxy.log ProxyHost = proxy.domain.com ProxyPort = 8080 2) Convert it into a non-forking server that handles multiple connections in a single process. Either by a threads library, or the more conventional state machine approach. I like the idea of a threads library approach. Unfortunately the threads approach would require that your system provide "kernel thread" support. This is not available on all the platforms I hope to support. User level threads doesn't provide the level of concurrency required. 3) When a non-forking version is available, allow multiple instances to run to reduce the file descriptor limits. A single non-forking process can only have as many connections open as the system allows open file descriptors per process. However 10 processes will give 10 times as many open connections. The Apache web server uses this method. However unlike Apache, we can handle multiple connections per process.