我正在努力在 Ruby 中实现 clamd 守护进程的 INSTREAM 命令。 这是clamd的文档
@file = File.open("input.txt")
socket = TCPSocket.new(HOST, PORT)
#writing the command
socket.write("zINSTREAM\0")
#streaming the chunk
socket.write(1024) #size of chunk
socket.write(@file.read(1024)) #chunk of data
#end the streaming
socket.write(0)
puts "Reading from the scoket"
puts socket.recv(1024)
socket.close
但我总是收到错误响应“超出 INSTREAM 大小限制。错误” 我在这里做错了什么?
最佳答案
经过长时间的斗争,我找到了解决方案。
chunk的大小必须在network byte order中用4字节无符号整数表示
所以
socket.write(1024)
应该是
socket.write([1024].pack("N"))
关于ruby - 如何在 Ruby 中为 clamd 实现 INSTREAM 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12570680/