def ext(name, key = "", value = "", opts = 0)
name = _argstr(name)
key = _argstr(key)
value = _argstr(value)
opts = _argnum(opts)
if !@sock
@ecode = EINVALID
return nil
end
sbuf = [0xC8, 0x68, name.length, opts, key.length, value.length].pack("CCNNNN")
sbuf += name + key + value
if !_send(sbuf)
@ecode = ESEND
return nil
end
code = _recvcode
if code == -1
@ecode = ERECV
return nil
end
if code != 0
@ecode = EMISC
return nil
end
vsiz = _recvint32
if vsiz < 0
@ecode = ERECV
return nil
end
vbuf = _recv(vsiz)
if !vbuf
@ecode = ERECV
return nil
end
return _retstr(vbuf)
end