`nc` (netcat) 从最初为空的命名管道读取时无限期挂起

`nc` (netcat) 从最初为空的命名管道读取时无限期挂起

nc像这样启动服务器:

nc -lk -p 12345 -s localhost < <named_pipe>

以及一位nc客户:

nc localhost 12345

当我运行命令并且管道为空时,nc挂起,这正是我所期望的。但是,即使我开始写入管道,例如:

watch -n 3 -t fortune > p

nc仍在等待。

当我systrace在服务器上运行时,我看到以下内容:

strace: Process <id> attached
restart_syscall(<... resuming interrupted read ...>

表示该进程正在等待读操作。

如果我对生产者进行系统跟踪,我可以看到对命名管道的持续写入。不清楚为什么当管道上有可用数据时服务器正在等待。

但是,如果我终止客户端并再次启动它,从而重新启动连接,一切都会正常工作。

系统信息:

OS: Ubuntu 20.04.6 LTS
BSD nc

相关内容