2012-09-24 116 views
1

我很努力地在Ruby中實現clamd守護進程的INSTREAM命令。 這裏是clamd如何在Ruby中實現INSTREAM協議?

@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大小限制超出。ERROR」 我做錯了的是什麼?

+0

從您提供的文件鏈接:「流被終止注意:不要超過clamd.conf中定義的StreamMaxLength,否則clamd將以超出INSTREAM大小限制的方式回覆並關閉連接上。」你的clamd.conf是什麼? – unnu

+0

我檢查了clamd.conf。 StreamMaxLength 25M。 input.txt的內容不會超過25兆字節。 –

+0

你確定必須在'zINSTREAM'命令後立即發送空終止符?它不應該只是'socket.write(「zINSTREAM」)'? – unnu

回答

3

經過漫長的鬥爭,我找到了解決方案。

塊的大小必須在4字節的無符號整數network byte order

表示這樣

socket.write(1024) 

應該

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