Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
L
libzmq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
libzmq
Commits
8a64d80f
Commit
8a64d80f
authored
Mar 21, 2012
by
Ian Barber
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #283 from pieterh/master
Fixed issue LIBZMQ-343 - zmq_msg_get/set are too complex
parents
0afd8a87
f26e4ab7
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
36 additions
and
295 deletions
+36
-295
.gitignore
.gitignore
+1
-0
zmq_msg_get.txt
doc/zmq_msg_get.txt
+15
-27
zmq_msg_more.txt
doc/zmq_msg_more.txt
+2
-2
zmq_msg_set.txt
doc/zmq_msg_set.txt
+8
-10
zmq.h
include/zmq.h
+3
-4
zmq.cpp
src/zmq.cpp
+4
-17
test_last_endpoint
tests/test_last_endpoint
+0
-225
test_msg_flags.cpp
tests/test_msg_flags.cpp
+3
-10
No files found.
.gitignore
View file @
8a64d80f
...
...
@@ -20,6 +20,7 @@ autom4te.cache
.*
*~
.*~
tests/test_last_endpoint
tests/test_pair_inproc
tests/test_pair_ipc
tests/test_pair_tcp
...
...
doc/zmq_msg_get.txt
View file @
8a64d80f
...
...
@@ -4,28 +4,24 @@ zmq_msg_get(3)
NAME
----
zmq_msg_get - get message
options
zmq_msg_get - get message
property
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
-----------
The _zmq_msg_get()_ function shall retrieve the value for the option
specified by the 'option_name' argument for the message pointed to by the
'message' argument, and store it in the buffer pointed to by the 'option_value'
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 _zmq_msg_get()_ function shall return the value for the property
specified by the 'property' argument for the message pointed to by the
'message' argument.
The following
option
s can be retrieved with the _zmq_msg_get()_ function:
The following
propertie
s can be retrieved with the _zmq_msg_get()_ function:
*ZMQ_MORE*::
Indicates that there are more message
part
s to follow after the 'message'.
Indicates that there are more message
frame
s to follow after the 'message'.
RETURN VALUE
------------
...
...
@@ -36,42 +32,34 @@ shall return `-1` and set 'errno' to one of the values defined below.
ERRORS
------
*EINVAL*::
The requested option _option_name_ is unknown, or the requested _option_size_ or
_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.
The requested _property_ is unknown.
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) {
// Create an empty 0MQ message to hold the message
part
int rc = zmq_msg_init (&
part
);
// Create an empty 0MQ message to hold the message
frame
int rc = zmq_msg_init (&
frame
);
assert (rc == 0);
// 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);
rc = getmsgopt (&part, ZMQ_MORE, &more, &more_size);
assert (rc == 0);
if (more)
if (zmq_msg_get (&frame, ZMQ_MORE))
fprintf (stderr, "more\n");
else {
fprintf (stderr, "end\n");
break;
}
zmq_msg_close (
part
);
zmq_msg_close (
frame
);
}
----
SEE ALSO
--------
linkzmq:zmq_msg_
poke
[3]
linkzmq:zmq_msg_
set
[3]
linkzmq:zmq_msg_init[3]
linkzmq:zmq_msg_close[3]
linkzmq:zmq[7]
...
...
doc/zmq_msg_more.txt
View file @
8a64d80f
...
...
@@ -50,8 +50,8 @@ while (true) {
SEE ALSO
--------
linkzmq:zmq_msg_
peek
[3]
linkzmq:zmq_msg_
poke
[3]
linkzmq:zmq_msg_
get
[3]
linkzmq:zmq_msg_
set
[3]
linkzmq:zmq_msg_init[3]
linkzmq:zmq_msg_close[3]
linkzmq:zmq[7]
...
...
doc/zmq_msg_set.txt
View file @
8a64d80f
...
...
@@ -5,22 +5,21 @@ zmq_msg_set(3)
NAME
----
zmq_msg_set - set message
options
zmq_msg_set - set message
property
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
-----------
The _zmq_msg_set()_ function shall set the option specified by the
'option_name' argument to the value pointed to by the 'option_value' argument
for the 0MQ socket pointed to by the 'socket' argument. The 'option_len'
argument is the size of the option value in bytes.
The _zmq_msg_set()_ function shall set the property specified by the
'property' argument to the value of the 'value' argument for the 0MQ
message fragment pointed to by the 'message' argument.
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
...
...
@@ -32,13 +31,12 @@ shall return `-1` and set 'errno' to one of the values defined below.
ERRORS
------
*EINVAL*::
The requested option _option_name_ is unknown, or the requested _option_len_ or
_option_value_ is invalid.
The requested property _property_ is unknown.
SEE ALSO
--------
linkzmq:zmq_msg_
peek
[3]
linkzmq:zmq_msg_
get
[3]
linkzmq:zmq[7]
...
...
include/zmq.h
View file @
8a64d80f
...
...
@@ -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
size_t
zmq_msg_size
(
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
,
size_t
*
optvallen
);
ZMQ_EXPORT
int
zmq_msg_set
(
zmq_msg_t
*
msg
,
int
option
,
const
void
*
optval
,
size_t
*
optvallen
);
ZMQ_EXPORT
int
zmq_msg_get
(
zmq_msg_t
*
msg
,
int
option
);
ZMQ_EXPORT
int
zmq_msg_set
(
zmq_msg_t
*
msg
,
int
option
,
int
optval
);
/******************************************************************************/
/* 0MQ socket definition. */
...
...
src/zmq.cpp
View file @
8a64d80f
...
...
@@ -549,34 +549,21 @@ size_t zmq_msg_size (zmq_msg_t *msg_)
int
zmq_msg_more
(
zmq_msg_t
*
msg_
)
{
int
more
;
size_t
more_size
=
sizeof
(
more
);
int
rc
=
zmq_msg_get
(
msg_
,
ZMQ_MORE
,
&
more
,
&
more_size
);
assert
(
rc
==
0
);
return
more
;
return
zmq_msg_get
(
msg_
,
ZMQ_MORE
);
}
int
zmq_msg_get
(
zmq_msg_t
*
msg_
,
int
option_
,
void
*
optval_
,
size_t
*
optvallen_
)
int
zmq_msg_get
(
zmq_msg_t
*
msg_
,
int
option_
)
{
switch
(
option_
)
{
case
ZMQ_MORE
:
if
(
*
optvallen_
<
sizeof
(
int
))
{
errno
=
EINVAL
;
return
-
1
;
}
*
((
int
*
)
optval_
)
=
(((
zmq
::
msg_t
*
)
msg_
)
->
flags
()
&
zmq
::
msg_t
::
more
)
?
1
:
0
;
*
optvallen_
=
sizeof
(
int
);
return
0
;
return
(((
zmq
::
msg_t
*
)
msg_
)
->
flags
()
&
zmq
::
msg_t
::
more
)
?
1
:
0
;
default:
errno
=
EINVAL
;
return
-
1
;
}
}
int
zmq_msg_set
(
zmq_msg_t
*
msg_
,
int
option_
,
const
void
*
optval_
,
size_t
*
optvallen_
)
int
zmq_msg_set
(
zmq_msg_t
*
msg_
,
int
option_
,
int
optval_
)
{
// No options supported at present
errno
=
EINVAL
;
...
...
tests/test_last_endpoint
deleted
100755 → 0
View file @
0afd8a87
#! /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
tests/test_msg_flags.cpp
View file @
8a64d80f
...
...
@@ -50,26 +50,19 @@ int main (int argc, char *argv [])
assert
(
rc
==
0
);
rc
=
zmq_recvmsg
(
sb
,
&
msg
,
0
);
assert
(
rc
>=
0
);
int
more
;
size_t
more_size
=
sizeof
(
more
);
rc
=
zmq_msg_get
(
&
msg
,
ZMQ_MORE
,
&
more
,
&
more_size
);
assert
(
rc
==
0
);
int
more
=
zmq_msg_get
(
&
msg
,
ZMQ_MORE
);
assert
(
more
==
1
);
// Then the first part of the message body.
rc
=
zmq_recvmsg
(
sb
,
&
msg
,
0
);
assert
(
rc
==
1
);
more_size
=
sizeof
(
more
);
rc
=
zmq_msg_get
(
&
msg
,
ZMQ_MORE
,
&
more
,
&
more_size
);
assert
(
rc
==
0
);
more
=
zmq_msg_get
(
&
msg
,
ZMQ_MORE
);
assert
(
more
==
1
);
// And finally, the second part of the message body.
rc
=
zmq_recvmsg
(
sb
,
&
msg
,
0
);
assert
(
rc
==
1
);
more_size
=
sizeof
(
more
);
rc
=
zmq_msg_get
(
&
msg
,
ZMQ_MORE
,
&
more
,
&
more_size
);
assert
(
rc
==
0
);
more
=
zmq_msg_get
(
&
msg
,
ZMQ_MORE
);
assert
(
more
==
0
);
// Deallocate the infrastructure.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment