so 1 gets data, writes to 2 who is waiting, who writes to 3 who is waiting, who writes to the socket, the kernel buffer has room, 3 then blocks on read, returns to 2 who loops back and blocks on read, returns and 1 loops back to blocking on read from the tcp socket