I finished my single copy pipe/fifo implementation. Main changes: * it's more a rewrite of pipe_read() and pipe_write(). Both functions were a nightmare of nested loops and gotos. I wrote a test app - with the right timing multiple writers on a fifo can race and then they busy loop in the current pipe_write() - adding another set of goto's for single copy is imho a bad idea. * slightly faster for non-zero copy transfers due to the code simplification. * No single copy for exactly 4096 byte writes, only > PIPE_BUF. Single copy (and thus blocking) such writes could trigger bugs in user space apps that errorneously assume that a pipe write of PIPE_BUF bytes after a successful poll(POLLOUT) doesn't block even if O_NONBLOCK is not set. It's not defined in posix or susv2, but no unix version I tested blocks in such writes. * on P II/350 single cpu it's a big win (~+70 % bw_pipe) * if you run 2 instances on a dual cpu P II/350 it's a big win, but if you run only one instance, then the bw_pipe processes will jump from one cpu to the other and it's only a small improvement (~+15%). I've attached the patch, the test app is at http://colorfullife.com/~manfred/kiopipe/fail.cpp Please test it! -- Manfred