Systems such as software transactional memory and some exception handling techniques use transactions. However, a typical limitation of such systems is that they do not allow system calls within transactions. This is particularly true for system calls that interact with file systems, devices, and the network. This paper describes systems architectures that can be used to extend a transactional system to allow network read/write system calls within a transaction. This is done by delaying the sending of network bytes to a peer until a transaction is committed, and implementing a rollback mechanism in case a transaction aborts. Three different architectures, one transport layer and two application layer, are proposed to incorporate this extension. The paper discusses the advantages and limitations of each of these architectures. Prototypes of each of the three architectures have been implemented. The paper describes the design and implementation of these prototypes, and provides an exte...