如何在Ruby中为clams实现INSTREAM协议?

时间:2012-09-24 18:25:01

标签: ruby sockets daemon

我正在努力在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大小限制。错误” 我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

经过长期的斗争,我找到了解决方案。

块的大小必须用network byte order

中的4字节无符号整数表示

所以

socket.write(1024)

应该是

socket.write([1024].pack("N"))