Host A:

```
tar cf -  stuff | dd | nc  -N -l 12987

```

Host B:

```
nc a.example.com 12987 | dd | tar tf - 

```

On host A `dd` prints its summary after `tar` completes. Thus it is clear, that tar closes the pipe/file -> `EOF`. 

> 
> 165040+0 records in 165040+0 records out 84500480 bytes transferred in
>  25.464802 secs (3318325 bytes/sec)
> 
> 
> 

On both hosts `nc` happily sits there without exiting. 
`nc(1)` :

```
   -N      shutdown(2) the network socket after EOF on the input.  Some
           servers require this to finish their work.

```

Thus on host A `nc` should have seen `EOF`, closed the damn socket and on host B `nc` should have seen the TCP connection terminate and should have closed `stdout` (`stdin` of `dd`/`tar`).

**How do I tell `nc` to close `stdout` / terminate on host B and terminate on host A**.

`nc` bug?

`-D` (debug) does nothing. `nc` can't even tell its version number... *sigh*

Both hosts are *FreeBSD 10.3-RELEASE-p4*, IPv4 only.