static int luazmq_skt_send_msg (lua_State *L) { zsocket *skt = luazmq_getsocket(L); zmessage *msg = luazmq_getmessage_at(L,2); int flags = luaL_optint(L,3,0); int ret = zmq_msg_send(&msg->msg, skt->skt, flags); if(-1 == ret) return luazmq_fail(L, skt); return luazmq_pass(L); }
static int luazmq_msg_copy(lua_State *L){ zmessage *dst, *src; int err; if(lua_gettop(L) == 1){ src = luazmq_getmessage_at(L, 1); dst = luazmq_newudata(L, zmessage, LUAZMQ_MESSAGE); err = zmq_msg_init(&dst->msg); if(-1 == err) return luazmq_fail(L, NULL); } else{ dst = luazmq_getmessage_at(L, 1); src = luazmq_getmessage_at(L, 2); lua_pushvalue(L, 1); // result } err = zmq_msg_copy(&dst->msg, &src->msg); if(-1 == err) return luazmq_fail(L, NULL); return 1; }
static int luazmq_skt_recv_new_msg (lua_State *L){ if(lua_isuserdata(L,2)) return luazmq_skt_recv_msg(L); luaL_optint(L, 2, 0); { int n = luazmq_msg_init(L); if(n != 1)return n; lua_insert(L, 2); n = luazmq_skt_recv_msg(L); if(lua_isnil(L, -n)){ zmessage *msg = luazmq_getmessage_at(L, 2); zmq_msg_close(&msg->msg); msg->flags |= LUAZMQ_FLAG_CLOSED; } return n; } }
static int luazmq_skt_recv_msg (lua_State *L) { zsocket *skt = luazmq_getsocket(L); zmessage *msg = luazmq_getmessage_at(L,2); int flags = luaL_optint(L,3,0); int ret = zmq_msg_recv(&msg->msg, skt->skt, flags); if(-1 == ret) return luazmq_fail(L, skt); lua_settop(L, 2); // remove flags if( zmq_msg_more(&msg->msg) ){ skt->flags |= LUAZMQ_FLAG_MORE; lua_pushboolean(L, 1); } else{ skt->flags &= ~LUAZMQ_FLAG_MORE; lua_pushboolean(L, 0); } return 2; }