def mget(recs)
raise ArgumentError if !recs.is_a?(Hash)
if !@sock
@ecode = EINVALID
return -1
end
rnum = 0
sbuf = ""
recs.each_pair do |key, value|
key = _argstr(key)
sbuf += [key.length].pack("N") + key
rnum += 1
end
sbuf = [0xC8, 0x31, rnum].pack("CCN") + sbuf
if !_send(sbuf)
@ecode = ESEND
return -1
end
code = _recvcode
rnum = _recvint32
if code == -1
@ecode = ERECV
return -1
end
if code != 0
@ecode = ENOREC
return -1
end
if rnum < 0
@ecode = ERECV
return -1
end
recs.clear
for i in 1..rnum
ksiz = _recvint32()
vsiz = _recvint32()
if ksiz < 0 || vsiz < 0
@ecode = ERECV
return -1
end
kbuf = _recv(ksiz)
vbuf = _recv(vsiz)
if !kbuf || !vbuf
@ecode = ERECV
return -1
end
recs[kbuf] = _retstr(vbuf)
end
return rnum
end