The netcat manpage indicates that, in the absence of the -c and -e options, a shell can be served via nc using the following commands.

```
$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

```

Now, as I understand it, both reads and writes from fifos are blocking operations. For example, if I run

```
$ mkfifo foo
$ cat foo

```

bash will block, because nothing has been written to foo. How does the pipeline in the example from the nc manpage not block? I assume I am misunderstanding how pipelines are executed.