splice() takes two unrelated descriptors (say, d1 and d2) and connects them... what would otherwise be read(d1)able from the first, is instead move to d2 as if somebody would read(d1, buffer) and write(d2, buffer) in a loop. Right? right. except not as a 'pipe' -- data flows both directions.