打印机lpd守护进程拒绝打印作业,如果命令的新行分开发送 – 错误?

我遇到了一些打印机LPD守护进程,如果新命令与命令在同一个数据包中发送,那么这些守护进程就可以正常工作,但是如果新行在单独的数据包中发送则会中断。 这是在这些特定的守护进程中的错误?

LPD协议是由以换行符结束的单行命令驱动的。 从RFC 1179 :

行式打印机守护程序响应发送到其端口的命令。 所有命令都以一个八位字节代码开始,该代码是一个代表所请求函数的二进制数字。 该代码后面紧跟着要执行该function的打印机队列名称的ASCII名称。 如果该命令有其他操作数,则用空格(ASCII空格,水平制表符,垂直制表符和换页符)将它们与打印机队列名称分开。 该命令的结尾用一个ASCII换行符表示。

这个Ruby代码被用来发送这样一个命令:

socket.puts command 

在内部,Ruby将其视为两个独立的套接字写入

 socket.print command socket.print "\n" 

偶尔会导致发送两个数据包,一个命令,一个换行。 这与Nagle的algorithm似乎并不一致,据我所知,但我已经用tcpdumpvalidation过它确实发生了。 当命令和换行单独发送时,一些LPD守护程序不接受打印作业,而是断开连接,或者用\ 0(RFC的一个ACK)以外的其他命令作出响应。

如果我将这个代码改为:

 socket.print command + "\n" 

所以命令和新命令总是一起发送,这些守护进程正常工作。

具有这种行为的LPD守护进程在打印机中,大小从桌面到工厂。 我要么不能访问他们的LPD守护进程日志,要么日志没有任何显示。 打印机对我来说大多是不透明的; 我对打印机的LPD进行了有限的访问或者没有访问(我甚至不知道每台打印机上运行的是哪个LPD守护进程)。

并非所有的LPD守护进程都受此行为的影响。 例如,打印到LPRNG的守护程序或CUP,即使在单独的数据包中发送新行时也能正常工作。

这是一个错误,还是有一些关于TCP / IP或我失踪的LPD协议?