From a7486be0e058d18ae9003969a7a842617032a9c7 Mon Sep 17 00:00:00 2001 From: Aleksey Yeschenko Date: Tue, 27 Apr 2010 01:14:44 +0300 Subject: [PATCH] Added support for s:getsockopt(zmq.RCVMORE) and multipart examples --- examples/client_multipart.lua | 34 ++++++++++++++++++++++++++++++++++ examples/server_multipart.lua | 35 +++++++++++++++++++++++++++++++++++ zmq.c | 1 + 3 files changed, 70 insertions(+) create mode 100644 examples/client_multipart.lua create mode 100644 examples/server_multipart.lua diff --git a/examples/client_multipart.lua b/examples/client_multipart.lua new file mode 100644 index 0000000..c830e57 --- /dev/null +++ b/examples/client_multipart.lua @@ -0,0 +1,34 @@ +-- Copyright (c) 2010 Aleksey Yeschenko +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and associated documentation files (the "Software"), to deal +-- in the Software without restriction, including without limitation the rights +-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-- copies of the Software, and to permit persons to whom the Software is +-- furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +-- THE SOFTWARE. + +require("zmq") + +local ctx = zmq.init(1, 1) +local s = ctx:socket(zmq.REQ) + +s:connect("tcp://localhost:5555") + +s:send("SELECT * FROM mytable ", zmq.SNDMORE) +s:send("WHERE library = 'zmq'") + +print(s:recv()) + +s:close() +ctx:term() diff --git a/examples/server_multipart.lua b/examples/server_multipart.lua new file mode 100644 index 0000000..2be3937 --- /dev/null +++ b/examples/server_multipart.lua @@ -0,0 +1,35 @@ +-- Copyright (c) 2010 Aleksey Yeschenko +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy +-- of this software and associated documentation files (the "Software"), to deal +-- in the Software without restriction, including without limitation the rights +-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +-- copies of the Software, and to permit persons to whom the Software is +-- furnished to do so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in +-- all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +-- THE SOFTWARE. + +require("zmq") + +local ctx = zmq.init(1, 1) +local s = ctx:socket(zmq.REP) + +s:bind("tcp://lo:5555") + +while true do + local query = s:recv() + while s:getsockopt(zmq.RCVMORE) == 1 do + query = query .. s:recv() + end + print(string.format("Received query: '%s'", query)) + s:send("OK") +end diff --git a/zmq.c b/zmq.c index 8dfe86a..834eccb 100644 --- a/zmq.c +++ b/zmq.c @@ -190,6 +190,7 @@ static int Lzmq_getsockopt(lua_State *L) case ZMQ_MCAST_LOOP: case ZMQ_SNDBUF: case ZMQ_RCVBUF: + case ZMQ_RCVMORE: { uint64_t optval; rc = zmq_getsockopt(s->ptr, option, (void *) &optval, &optvallen);