The splice package

[Tags:bsd3, library]

A library that implements efficient socket to socket data transfer loops for proxy servers.

On Linux, it uses the zero-copy splice() system call:

On all other operating systems, it currently falls back to a portable Haskell implementation that allocates a constant-sized memory buffer before it enters an inner loop which then uses hGetBufSome and hPutBuf; this avoids lots of tiny allocations as would otherwise be caused by recv and sendAll functions from Network.Socket.ByteString.

This work is funded by Corsis Research and used in:

PortFusion ]-[ayabusa – German research project for building the simplest high-performance distributed reverse / forward proxy.


Versions 0.1, 0.2, 0.3, 0.3.1, 0.3.2, 0.4, 0.5, 0.5.1, 0.6,, 0.6.1,
Dependencies base (>=4 && <=6), network (>=2 && <=4), unix (>=2 && <=4) [details]
License BSD3
Copyright Copyright © 2012 Cetin Sert
Author Cetin Sert <>
Maintainer Cetin Sert <>
Stability stable on Linux, experimental on other operating systems
Category Network
Home page
Uploaded Wed Apr 11 03:23:56 UTC 2012 by CetinSert
Distributions LTSHaskell:, NixOS:, Stackage:, Tumbleweed:
Downloads 2472 total (27 in the last 30 days)
1 []
Status Docs uploaded by user
Build status unknown [no reports yet]




portableexplicitly enable portable splice implemented in HaskellDisabledAutomatic

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees