mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-20 10:23:47 +00:00
Simplified zmq_msg_get/set functions
* Return integer property * Fixed up man pages, which were inaccurate * Fixed test case
This commit is contained in:
parent
6dd102cded
commit
f26e4ab784
1
.gitignore
vendored
1
.gitignore
vendored
@ -20,6 +20,7 @@ autom4te.cache
|
|||||||
.*
|
.*
|
||||||
*~
|
*~
|
||||||
.*~
|
.*~
|
||||||
|
tests/test_last_endpoint
|
||||||
tests/test_pair_inproc
|
tests/test_pair_inproc
|
||||||
tests/test_pair_ipc
|
tests/test_pair_ipc
|
||||||
tests/test_pair_tcp
|
tests/test_pair_tcp
|
||||||
|
@ -4,28 +4,24 @@ zmq_msg_get(3)
|
|||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
zmq_msg_get - get message options
|
zmq_msg_get - get message property
|
||||||
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
*int zmq_msg_get (zmq_msg_t '*message', int 'option_name', void '*option_value', size_t '*option_len');*
|
*int zmq_msg_get (zmq_msg_t '*message', int 'property');*
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
The _zmq_msg_get()_ function shall retrieve the value for the option
|
The _zmq_msg_get()_ function shall return the value for the property
|
||||||
specified by the 'option_name' argument for the message pointed to by the
|
specified by the 'property' argument for the message pointed to by the
|
||||||
'message' argument, and store it in the buffer pointed to by the 'option_value'
|
'message' argument.
|
||||||
argument. The 'option_len' argument is the size in bytes of the buffer pointed
|
|
||||||
to by 'option_value'; upon successful completion _zmq_getsockopt()_ shall
|
|
||||||
modify the 'option_len' argument to indicate the actual size of the option
|
|
||||||
value stored in the buffer.
|
|
||||||
|
|
||||||
The following options can be retrieved with the _zmq_msg_get()_ function:
|
The following properties can be retrieved with the _zmq_msg_get()_ function:
|
||||||
|
|
||||||
*ZMQ_MORE*::
|
*ZMQ_MORE*::
|
||||||
Indicates that there are more message parts to follow after the 'message'.
|
Indicates that there are more message frames to follow after the 'message'.
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
------------
|
------------
|
||||||
@ -36,42 +32,34 @@ shall return `-1` and set 'errno' to one of the values defined below.
|
|||||||
ERRORS
|
ERRORS
|
||||||
------
|
------
|
||||||
*EINVAL*::
|
*EINVAL*::
|
||||||
The requested option _option_name_ is unknown, or the requested _option_size_ or
|
The requested _property_ is unknown.
|
||||||
_option_value_ is invalid, or the size of the buffer pointed to by
|
|
||||||
_option_value_, as specified by _option_len_, is insufficient for storing the
|
|
||||||
option value.
|
|
||||||
|
|
||||||
|
|
||||||
EXAMPLE
|
EXAMPLE
|
||||||
-------
|
-------
|
||||||
.Receiving a multi-part message
|
.Receiving a multi-frame message
|
||||||
----
|
----
|
||||||
zmq_msg_t part;
|
|
||||||
int more;
|
|
||||||
size_t more_size = sizeof (more);
|
|
||||||
while (true) {
|
while (true) {
|
||||||
// Create an empty 0MQ message to hold the message part
|
// Create an empty 0MQ message to hold the message frame
|
||||||
int rc = zmq_msg_init (&part);
|
int rc = zmq_msg_init (&frame);
|
||||||
assert (rc == 0);
|
assert (rc == 0);
|
||||||
// Block until a message is available to be received from socket
|
// Block until a message is available to be received from socket
|
||||||
rc = zmq_recvmsg (socket, &part, 0);
|
rc = zmq_recvmsg (socket, &frame, 0);
|
||||||
assert (rc != -1);
|
assert (rc != -1);
|
||||||
rc = getmsgopt (&part, ZMQ_MORE, &more, &more_size);
|
if (zmq_msg_get (&frame, ZMQ_MORE))
|
||||||
assert (rc == 0);
|
|
||||||
if (more)
|
|
||||||
fprintf (stderr, "more\n");
|
fprintf (stderr, "more\n");
|
||||||
else {
|
else {
|
||||||
fprintf (stderr, "end\n");
|
fprintf (stderr, "end\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
zmq_msg_close (part);
|
zmq_msg_close (frame);
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkzmq:zmq_msg_poke[3]
|
linkzmq:zmq_msg_set[3]
|
||||||
linkzmq:zmq_msg_init[3]
|
linkzmq:zmq_msg_init[3]
|
||||||
linkzmq:zmq_msg_close[3]
|
linkzmq:zmq_msg_close[3]
|
||||||
linkzmq:zmq[7]
|
linkzmq:zmq[7]
|
||||||
|
@ -50,8 +50,8 @@ while (true) {
|
|||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkzmq:zmq_msg_peek[3]
|
linkzmq:zmq_msg_get[3]
|
||||||
linkzmq:zmq_msg_poke[3]
|
linkzmq:zmq_msg_set[3]
|
||||||
linkzmq:zmq_msg_init[3]
|
linkzmq:zmq_msg_init[3]
|
||||||
linkzmq:zmq_msg_close[3]
|
linkzmq:zmq_msg_close[3]
|
||||||
linkzmq:zmq[7]
|
linkzmq:zmq[7]
|
||||||
|
@ -5,22 +5,21 @@ zmq_msg_set(3)
|
|||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
|
|
||||||
zmq_msg_set - set message options
|
zmq_msg_set - set message property
|
||||||
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
*int zmq_msg_peek (zmq_msg_t '*message', int 'option_name', const void '*option_value', size_t '*option_len');*
|
*int zmq_msg_set (zmq_msg_t '*message', int 'property', int 'value');*
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
The _zmq_msg_set()_ function shall set the option specified by the
|
The _zmq_msg_set()_ function shall set the property specified by the
|
||||||
'option_name' argument to the value pointed to by the 'option_value' argument
|
'property' argument to the value of the 'value' argument for the 0MQ
|
||||||
for the 0MQ socket pointed to by the 'socket' argument. The 'option_len'
|
message fragment pointed to by the 'message' argument.
|
||||||
argument is the size of the option value in bytes.
|
|
||||||
|
|
||||||
Currently the _zmq_msg_set()_ function does not support any option names.
|
Currently the _zmq_msg_set()_ function does not support any property names.
|
||||||
|
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
@ -32,13 +31,12 @@ shall return `-1` and set 'errno' to one of the values defined below.
|
|||||||
ERRORS
|
ERRORS
|
||||||
------
|
------
|
||||||
*EINVAL*::
|
*EINVAL*::
|
||||||
The requested option _option_name_ is unknown, or the requested _option_len_ or
|
The requested property _property_ is unknown.
|
||||||
_option_value_ is invalid.
|
|
||||||
|
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkzmq:zmq_msg_peek[3]
|
linkzmq:zmq_msg_get[3]
|
||||||
linkzmq:zmq[7]
|
linkzmq:zmq[7]
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,10 +168,9 @@ ZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src);
|
|||||||
ZMQ_EXPORT void *zmq_msg_data (zmq_msg_t *msg);
|
ZMQ_EXPORT void *zmq_msg_data (zmq_msg_t *msg);
|
||||||
ZMQ_EXPORT size_t zmq_msg_size (zmq_msg_t *msg);
|
ZMQ_EXPORT size_t zmq_msg_size (zmq_msg_t *msg);
|
||||||
ZMQ_EXPORT int zmq_msg_more (zmq_msg_t *msg);
|
ZMQ_EXPORT int zmq_msg_more (zmq_msg_t *msg);
|
||||||
ZMQ_EXPORT int zmq_msg_get (zmq_msg_t *msg, int option, void *optval,
|
ZMQ_EXPORT int zmq_msg_get (zmq_msg_t *msg, int option);
|
||||||
size_t *optvallen);
|
ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, int optval);
|
||||||
ZMQ_EXPORT int zmq_msg_set (zmq_msg_t *msg, int option, const void *optval,
|
|
||||||
size_t *optvallen);
|
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* 0MQ socket definition. */
|
/* 0MQ socket definition. */
|
||||||
|
21
src/zmq.cpp
21
src/zmq.cpp
@ -549,34 +549,21 @@ size_t zmq_msg_size (zmq_msg_t *msg_)
|
|||||||
|
|
||||||
int zmq_msg_more (zmq_msg_t *msg_)
|
int zmq_msg_more (zmq_msg_t *msg_)
|
||||||
{
|
{
|
||||||
int more;
|
return zmq_msg_get (msg_, ZMQ_MORE);
|
||||||
size_t more_size = sizeof (more);
|
|
||||||
int rc = zmq_msg_get (msg_, ZMQ_MORE, &more, &more_size);
|
|
||||||
assert (rc == 0);
|
|
||||||
return more;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmq_msg_get (zmq_msg_t *msg_, int option_, void *optval_,
|
int zmq_msg_get (zmq_msg_t *msg_, int option_)
|
||||||
size_t *optvallen_)
|
|
||||||
{
|
{
|
||||||
switch (option_) {
|
switch (option_) {
|
||||||
case ZMQ_MORE:
|
case ZMQ_MORE:
|
||||||
if (*optvallen_ < sizeof (int)) {
|
return (((zmq::msg_t*) msg_)->flags () & zmq::msg_t::more)? 1: 0;
|
||||||
errno = EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*((int*) optval_) =
|
|
||||||
(((zmq::msg_t*) msg_)->flags () & zmq::msg_t::more)? 1 : 0;
|
|
||||||
*optvallen_ = sizeof (int);
|
|
||||||
return 0;
|
|
||||||
default:
|
default:
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmq_msg_set (zmq_msg_t *msg_, int option_, const void *optval_,
|
int zmq_msg_set (zmq_msg_t *msg_, int option_, int optval_)
|
||||||
size_t *optvallen_)
|
|
||||||
{
|
{
|
||||||
// No options supported at present
|
// No options supported at present
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
@ -1,225 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
# test_last_endpoint - temporary wrapper script for .libs/test_last_endpoint
|
|
||||||
# Generated by libtool (GNU libtool) 2.4 Debian-2.4-2ubuntu1
|
|
||||||
#
|
|
||||||
# The test_last_endpoint program cannot be directly executed until all the libtool
|
|
||||||
# libraries that it depends on are installed.
|
|
||||||
#
|
|
||||||
# This wrapper script should never be moved out of the build directory.
|
|
||||||
# If it is, it will not operate correctly.
|
|
||||||
|
|
||||||
# Sed substitution that helps us do robust quoting. It backslashifies
|
|
||||||
# metacharacters that are still active within double-quoted strings.
|
|
||||||
sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
|
|
||||||
|
|
||||||
# Be Bourne compatible
|
|
||||||
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
|
|
||||||
emulate sh
|
|
||||||
NULLCMD=:
|
|
||||||
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
|
|
||||||
# is contrary to our usage. Disable this feature.
|
|
||||||
alias -g '${1+"$@"}'='"$@"'
|
|
||||||
setopt NO_GLOB_SUBST
|
|
||||||
else
|
|
||||||
case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
|
|
||||||
fi
|
|
||||||
BIN_SH=xpg4; export BIN_SH # for Tru64
|
|
||||||
DUALCASE=1; export DUALCASE # for MKS sh
|
|
||||||
|
|
||||||
# The HP-UX ksh and POSIX shell print the target directory to stdout
|
|
||||||
# if CDPATH is set.
|
|
||||||
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
|
|
||||||
|
|
||||||
relink_command="(cd /home/ph/work/libzmq_pieterh/tests; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; LD_LIBRARY_PATH=/usr/local/lib; export LD_LIBRARY_PATH; PATH=/opt/android-toolchain/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; g++ -g -O2 -o \$progdir/\$file test_last_endpoint.o ../src/.libs/libzmq.so -lrt -lpthread -Wl,-rpath -Wl,/home/ph/work/libzmq_pieterh/src/.libs)"
|
|
||||||
|
|
||||||
# This environment variable determines our operation mode.
|
|
||||||
if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
|
|
||||||
# install mode needs the following variables:
|
|
||||||
generated_by_libtool_version='2.4'
|
|
||||||
notinst_deplibs=' ../src/libzmq.la'
|
|
||||||
else
|
|
||||||
# When we are sourced in execute mode, $file and $ECHO are already set.
|
|
||||||
if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
|
|
||||||
file="$0"
|
|
||||||
|
|
||||||
# A function that is used when there is no print builtin or printf.
|
|
||||||
func_fallback_echo ()
|
|
||||||
{
|
|
||||||
eval 'cat <<_LTECHO_EOF
|
|
||||||
$1
|
|
||||||
_LTECHO_EOF'
|
|
||||||
}
|
|
||||||
ECHO="printf %s\\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Very basic option parsing. These options are (a) specific to
|
|
||||||
# the libtool wrapper, (b) are identical between the wrapper
|
|
||||||
# /script/ and the wrapper /executable/ which is used only on
|
|
||||||
# windows platforms, and (c) all begin with the string --lt-
|
|
||||||
# (application programs are unlikely to have options which match
|
|
||||||
# this pattern).
|
|
||||||
#
|
|
||||||
# There are only two supported options: --lt-debug and
|
|
||||||
# --lt-dump-script. There is, deliberately, no --lt-help.
|
|
||||||
#
|
|
||||||
# The first argument to this parsing function should be the
|
|
||||||
# script's ../libtool value, followed by no.
|
|
||||||
lt_option_debug=
|
|
||||||
func_parse_lt_options ()
|
|
||||||
{
|
|
||||||
lt_script_arg0=$0
|
|
||||||
shift
|
|
||||||
for lt_opt
|
|
||||||
do
|
|
||||||
case "$lt_opt" in
|
|
||||||
--lt-debug) lt_option_debug=1 ;;
|
|
||||||
--lt-dump-script)
|
|
||||||
lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'`
|
|
||||||
test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=.
|
|
||||||
lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'`
|
|
||||||
cat "$lt_dump_D/$lt_dump_F"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
--lt-*)
|
|
||||||
$ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Print the debug banner immediately:
|
|
||||||
if test -n "$lt_option_debug"; then
|
|
||||||
echo "test_last_endpoint:test_last_endpoint:${LINENO}: libtool wrapper (GNU libtool) 2.4 Debian-2.4-2ubuntu1" 1>&2
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Used when --lt-debug. Prints its arguments to stdout
|
|
||||||
# (redirection is the responsibility of the caller)
|
|
||||||
func_lt_dump_args ()
|
|
||||||
{
|
|
||||||
lt_dump_args_N=1;
|
|
||||||
for lt_arg
|
|
||||||
do
|
|
||||||
$ECHO "test_last_endpoint:test_last_endpoint:${LINENO}: newargv[$lt_dump_args_N]: $lt_arg"
|
|
||||||
lt_dump_args_N=`expr $lt_dump_args_N + 1`
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Core function for launching the target application
|
|
||||||
func_exec_program_core ()
|
|
||||||
{
|
|
||||||
|
|
||||||
if test -n "$lt_option_debug"; then
|
|
||||||
$ECHO "test_last_endpoint:test_last_endpoint:${LINENO}: newargv[0]: $progdir/$program" 1>&2
|
|
||||||
func_lt_dump_args ${1+"$@"} 1>&2
|
|
||||||
fi
|
|
||||||
exec "$progdir/$program" ${1+"$@"}
|
|
||||||
|
|
||||||
$ECHO "$0: cannot exec $program $*" 1>&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# A function to encapsulate launching the target application
|
|
||||||
# Strips options in the --lt-* namespace from $@ and
|
|
||||||
# launches target application with the remaining arguments.
|
|
||||||
func_exec_program ()
|
|
||||||
{
|
|
||||||
for lt_wr_arg
|
|
||||||
do
|
|
||||||
case $lt_wr_arg in
|
|
||||||
--lt-*) ;;
|
|
||||||
*) set x "$@" "$lt_wr_arg"; shift;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
func_exec_program_core ${1+"$@"}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Parse options
|
|
||||||
func_parse_lt_options "$0" ${1+"$@"}
|
|
||||||
|
|
||||||
# Find the directory that this script lives in.
|
|
||||||
thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'`
|
|
||||||
test "x$thisdir" = "x$file" && thisdir=.
|
|
||||||
|
|
||||||
# Follow symbolic links until we get to the real thisdir.
|
|
||||||
file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'`
|
|
||||||
while test -n "$file"; do
|
|
||||||
destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'`
|
|
||||||
|
|
||||||
# If there was a directory component, then change thisdir.
|
|
||||||
if test "x$destdir" != "x$file"; then
|
|
||||||
case "$destdir" in
|
|
||||||
[\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
|
|
||||||
*) thisdir="$thisdir/$destdir" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
file=`$ECHO "$file" | /bin/sed 's%^.*/%%'`
|
|
||||||
file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'`
|
|
||||||
done
|
|
||||||
|
|
||||||
# Usually 'no', except on cygwin/mingw when embedded into
|
|
||||||
# the cwrapper.
|
|
||||||
WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
|
|
||||||
if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
|
|
||||||
# special case for '.'
|
|
||||||
if test "$thisdir" = "."; then
|
|
||||||
thisdir=`pwd`
|
|
||||||
fi
|
|
||||||
# remove .libs from thisdir
|
|
||||||
case "$thisdir" in
|
|
||||||
*[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;;
|
|
||||||
.libs ) thisdir=. ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Try to get the absolute directory name.
|
|
||||||
absdir=`cd "$thisdir" && pwd`
|
|
||||||
test -n "$absdir" && thisdir="$absdir"
|
|
||||||
|
|
||||||
program=lt-'test_last_endpoint'
|
|
||||||
progdir="$thisdir/.libs"
|
|
||||||
|
|
||||||
if test ! -f "$progdir/$program" ||
|
|
||||||
{ file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \
|
|
||||||
test "X$file" != "X$progdir/$program"; }; then
|
|
||||||
|
|
||||||
file="$$-$program"
|
|
||||||
|
|
||||||
if test ! -d "$progdir"; then
|
|
||||||
mkdir "$progdir"
|
|
||||||
else
|
|
||||||
rm -f "$progdir/$file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# relink executable if necessary
|
|
||||||
if test -n "$relink_command"; then
|
|
||||||
if relink_command_output=`eval $relink_command 2>&1`; then :
|
|
||||||
else
|
|
||||||
printf %s\n "$relink_command_output" >&2
|
|
||||||
rm -f "$progdir/$file"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
|
|
||||||
{ rm -f "$progdir/$program";
|
|
||||||
mv -f "$progdir/$file" "$progdir/$program"; }
|
|
||||||
rm -f "$progdir/$file"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -f "$progdir/$program"; then
|
|
||||||
if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
|
|
||||||
# Run the actual program with our arguments.
|
|
||||||
func_exec_program ${1+"$@"}
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# The program doesn't exist.
|
|
||||||
$ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
|
|
||||||
$ECHO "This script is just a wrapper for $program." 1>&2
|
|
||||||
$ECHO "See the libtool documentation for more information." 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
@ -50,26 +50,19 @@ int main (int argc, char *argv [])
|
|||||||
assert (rc == 0);
|
assert (rc == 0);
|
||||||
rc = zmq_recvmsg (sb, &msg, 0);
|
rc = zmq_recvmsg (sb, &msg, 0);
|
||||||
assert (rc >= 0);
|
assert (rc >= 0);
|
||||||
int more;
|
int more = zmq_msg_get (&msg, ZMQ_MORE);
|
||||||
size_t more_size = sizeof (more);
|
|
||||||
rc = zmq_msg_get (&msg, ZMQ_MORE, &more, &more_size);
|
|
||||||
assert (rc == 0);
|
|
||||||
assert (more == 1);
|
assert (more == 1);
|
||||||
|
|
||||||
// Then the first part of the message body.
|
// Then the first part of the message body.
|
||||||
rc = zmq_recvmsg (sb, &msg, 0);
|
rc = zmq_recvmsg (sb, &msg, 0);
|
||||||
assert (rc == 1);
|
assert (rc == 1);
|
||||||
more_size = sizeof (more);
|
more = zmq_msg_get (&msg, ZMQ_MORE);
|
||||||
rc = zmq_msg_get (&msg, ZMQ_MORE, &more, &more_size);
|
|
||||||
assert (rc == 0);
|
|
||||||
assert (more == 1);
|
assert (more == 1);
|
||||||
|
|
||||||
// And finally, the second part of the message body.
|
// And finally, the second part of the message body.
|
||||||
rc = zmq_recvmsg (sb, &msg, 0);
|
rc = zmq_recvmsg (sb, &msg, 0);
|
||||||
assert (rc == 1);
|
assert (rc == 1);
|
||||||
more_size = sizeof (more);
|
more = zmq_msg_get (&msg, ZMQ_MORE);
|
||||||
rc = zmq_msg_get (&msg, ZMQ_MORE, &more, &more_size);
|
|
||||||
assert (rc == 0);
|
|
||||||
assert (more == 0);
|
assert (more == 0);
|
||||||
|
|
||||||
// Deallocate the infrastructure.
|
// Deallocate the infrastructure.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user