def misc(name, args = [], opts = 0)
name = _argstr(name)
args = Array::new if !args.is_a?(Array)
opts = _argnum(opts)
if !@sock
@ecode = EINVALID
return nil
end
sbuf = [0xC8, 0x90, name.length, opts, args.size].pack("CCNNN")
sbuf += name
args.each do |arg|
arg = _argstr(arg)
sbuf += [arg.length].pack("N") + arg
end
if !_send(sbuf)
@ecode = ESEND
return nil
end
code = _recvcode
rnum = _recvint32
if code == -1
@ecode = ERECV
return nil
end
if code != 0
@ecode = EMISC
return nil
end
res = Array::new
for i in 1..rnum
esiz = _recvint32
if esiz < 0
@ecode = ERECV
return nil
end
ebuf = _recv(esiz)
if !ebuf
@ecode = ERECV
return nil
end
res.push(_retstr(ebuf))
end
return res
end