Parce que le nc
commande dans <(...)
lira également à partir de stdin.
Exemple plus simple :
$ nc -l 9999 >/tmp/foo &
[1] 5659
$ echo text | cat <(nc -N localhost 9999) -
[1]+ Done nc -l 9999 > /tmp/foo
D'où vient le text
aller? Via le netcat.
$ cat /tmp/foo
text
Votre programme et nc
concourir pour le même stdin, et nc
en obtient une partie.
epoll() ou poll() retournant avec E/POLLIN vous dira seulement qu'un single read() peut pas bloquer.
Non pas que vous puissiez faire beaucoup de lectures d'un octet jusqu'à une nouvelle ligne, comme vous le faites.
Je dis peut car un read() après epoll() retourné avec E/POLLIN peut encore bloquer.
Votre code essaiera également de lire après EOF et ignorera complètement les erreurs de lecture().