Date of Award


Degree Name

MS in Computer Science


Computer Science


Michael Haungs


Over the past few decades, the size and scope of the Internet has grown exponentially. In order to maintain support for legacy clients, new applications and services have been limited by dependence on traditional sockets and TCP, which provide no support for modifying endpoints after connection setup. This forces applications to implement their own logic to reroute communications to take advantage of composable services or handle failover. Some solutions have added socket operations that allow for endpoints to be redirected on the fly, but these have been limited in scope to handling failover and load balancing.

We present two new sets of socket operations. The first set allows servers to dynamically insert and remove intermediaries into communication streams. This allows applications to decide in real time whether to use services provided by 3rd parties such as encryption, filtering, and compression. In this way, applications can employ dynamic service composition to customize communication between clients and servers. The second set of operations allows sockets to be split such that all frames written to the socket are sent to multiple recipients. This is useful for implementing fast failover and passive communication monitoring. All of these operations are implemented in user space and gracefully handle legacy TCP clients, making quick deployment of distributed Internet applications a real possibility. Performance tests of the new operations on remote hosts show that the overhead introduced is not prohibitive.