mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-09 15:26:04 +00:00
commit
ffe4a1c615
@ -241,6 +241,21 @@
|
||||
<ClCompile Include="..\..\..\..\src\socket_poller.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\dish.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\radio.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||
@ -519,6 +534,21 @@
|
||||
<ClInclude Include="..\..\..\..\src\decoder_allocators.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\dish.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\radio.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="include">
|
||||
|
@ -241,6 +241,21 @@
|
||||
<ClCompile Include="..\..\..\..\src\socket_poller.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\dish.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\radio.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||
@ -519,6 +534,21 @@
|
||||
<ClInclude Include="..\..\..\..\src\decoder_allocators.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\dish.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\radio.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="include">
|
||||
|
@ -241,6 +241,21 @@
|
||||
<ClCompile Include="..\..\..\..\src\socket_poller.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\dish.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\radio.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||
@ -519,6 +534,21 @@
|
||||
<ClInclude Include="..\..\..\..\src\decoder_allocators.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\dish.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\radio.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||
<Filter>src\include</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="include">
|
||||
|
@ -19,7 +19,8 @@ by the 'socket' argument and store it in the buffer referenced by the 'buf'
|
||||
argument. Any bytes exceeding the length specified by the 'len' argument shall
|
||||
be truncated. If there are no messages available on the specified 'socket'
|
||||
the _zmq_recv()_ function shall block until the request can be satisfied.
|
||||
The 'flags' argument is a combination of the flags defined below:
|
||||
The 'flags' argument is a combination of the flags defined below: The 'buf'
|
||||
argument may be null if len is zero.
|
||||
|
||||
*ZMQ_DONTWAIT*::
|
||||
Specifies that the operation should be performed in non-blocking mode. If there
|
||||
|
@ -70,8 +70,7 @@ int zmq::dealer_t::xsetsockopt (int option_, const void *optval_,
|
||||
size_t optvallen_)
|
||||
{
|
||||
bool is_int = (optvallen_ == sizeof (int));
|
||||
int value = 0;
|
||||
if (is_int) memcpy(&value, optval_, sizeof (int));
|
||||
int value = is_int? *((int *) optval_): 0;
|
||||
|
||||
switch (option_) {
|
||||
case ZMQ_PROBE_ROUTER:
|
||||
|
@ -92,8 +92,7 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
|
||||
size_t optvallen_)
|
||||
{
|
||||
bool is_int = (optvallen_ == sizeof (int));
|
||||
int value = 0;
|
||||
if (is_int) memcpy(&value, optval_, sizeof (int));
|
||||
int value = is_int? *((int *) optval_): 0;
|
||||
#if defined (ZMQ_ACT_MILITANT)
|
||||
bool malformed = true; // Did caller pass a bad option value?
|
||||
#endif
|
||||
|
@ -204,8 +204,8 @@ bool zmq::req_t::xhas_out ()
|
||||
int zmq::req_t::xsetsockopt (int option_, const void *optval_, size_t optvallen_)
|
||||
{
|
||||
bool is_int = (optvallen_ == sizeof (int));
|
||||
int value = 0;
|
||||
if (is_int) memcpy(&value, optval_, sizeof (int));
|
||||
int value = is_int? *((int *) optval_): 0;
|
||||
|
||||
switch (option_) {
|
||||
case ZMQ_REQ_CORRELATE:
|
||||
if (is_int && value >= 0) {
|
||||
|
@ -97,8 +97,7 @@ int zmq::router_t::xsetsockopt (int option_, const void *optval_,
|
||||
size_t optvallen_)
|
||||
{
|
||||
bool is_int = (optvallen_ == sizeof (int));
|
||||
int value = 0;
|
||||
if (is_int) memcpy(&value, optval_, sizeof (int));
|
||||
int value = is_int? *((int *) optval_): 0;
|
||||
|
||||
switch (option_) {
|
||||
case ZMQ_CONNECT_RID:
|
||||
|
@ -178,8 +178,8 @@ int zmq::stream_t::xsetsockopt (int option_, const void *optval_,
|
||||
size_t optvallen_)
|
||||
{
|
||||
bool is_int = (optvallen_ == sizeof (int));
|
||||
int value = 0;
|
||||
if (is_int) memcpy(&value, optval_, sizeof (int));
|
||||
int value = is_int? *((int *) optval_): 0;
|
||||
|
||||
switch (option_) {
|
||||
case ZMQ_CONNECT_RID:
|
||||
if (optval_ && optvallen_) {
|
||||
|
@ -62,9 +62,11 @@ int zmq::sub_t::xsetsockopt (int option_, const void *optval_,
|
||||
else
|
||||
if (option_ == ZMQ_UNSUBSCRIBE)
|
||||
*data = 0;
|
||||
if (optvallen_ > 0)
|
||||
// We explicitly allow a NULL subscription with size zero
|
||||
if (optvallen_) {
|
||||
assert (optval_);
|
||||
memcpy (data + 1, optval_, optvallen_);
|
||||
|
||||
}
|
||||
// Pass it further on in the stack.
|
||||
int err = 0;
|
||||
rc = xsub_t::xsend (&msg);
|
||||
|
@ -226,14 +226,18 @@ void zmq::xsub_t::send_subscription (unsigned char *data_, size_t size_,
|
||||
{
|
||||
pipe_t *pipe = (pipe_t*) arg_;
|
||||
|
||||
// Create the subsctription message.
|
||||
// Create the subscription message.
|
||||
msg_t msg;
|
||||
int rc = msg.init_size (size_ + 1);
|
||||
errno_assert (rc == 0);
|
||||
unsigned char *data = (unsigned char*) msg.data ();
|
||||
data [0] = 1;
|
||||
if (size_ > 0)
|
||||
|
||||
// We explicitly allow a NULL subscription with size zero
|
||||
if (size_) {
|
||||
assert (data_);
|
||||
memcpy (data + 1, data_, size_);
|
||||
}
|
||||
|
||||
// Send it to the pipe.
|
||||
bool sent = pipe->write (&msg);
|
||||
|
22
src/zmq.cpp
22
src/zmq.cpp
@ -390,14 +390,16 @@ int zmq_send (void *s_, const void *buf_, size_t len_, int flags_)
|
||||
return -1;
|
||||
}
|
||||
zmq_msg_t msg;
|
||||
int rc = zmq_msg_init_size (&msg, len_);
|
||||
if (rc != 0)
|
||||
if (zmq_msg_init_size (&msg, len_))
|
||||
return -1;
|
||||
if (len_ > 0)
|
||||
memcpy (zmq_msg_data (&msg), buf_, len_);
|
||||
|
||||
// We explicitly allow a send from NULL, size zero
|
||||
if (len_) {
|
||||
assert (buf_);
|
||||
memcpy (zmq_msg_data (&msg), buf_, len_);
|
||||
}
|
||||
zmq::socket_base_t *s = (zmq::socket_base_t *) s_;
|
||||
rc = s_sendmsg (s, &msg, flags_);
|
||||
int rc = s_sendmsg (s, &msg, flags_);
|
||||
if (unlikely (rc < 0)) {
|
||||
int err = errno;
|
||||
int rc2 = zmq_msg_close (&msg);
|
||||
@ -517,12 +519,14 @@ int zmq_recv (void *s_, void *buf_, size_t len_, int flags_)
|
||||
return -1;
|
||||
}
|
||||
|
||||
// At the moment an oversized message is silently truncated.
|
||||
// TODO: Build in a notification mechanism to report the overflows.
|
||||
// An oversized message is silently truncated.
|
||||
size_t to_copy = size_t (nbytes) < len_ ? size_t (nbytes) : len_;
|
||||
if (to_copy > 0)
|
||||
memcpy (buf_, zmq_msg_data (&msg), to_copy);
|
||||
|
||||
// We explicitly allow a null buffer argument if len is zero
|
||||
if (to_copy) {
|
||||
assert (buf_);
|
||||
memcpy (buf_, zmq_msg_data (&msg), to_copy);
|
||||
}
|
||||
rc = zmq_msg_close (&msg);
|
||||
errno_assert (rc == 0);
|
||||
|
||||
|
@ -27,12 +27,11 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "macros.hpp"
|
||||
#include "testutil.hpp"
|
||||
|
||||
void ffn(void *data, void *hint) {
|
||||
LIBZMQ_UNUSED (data);
|
||||
// Signal that ffn has been called by writing "freed" to hint
|
||||
(void) data; // Suppress 'unused' warnings at compile time
|
||||
memcpy(hint, (void *) "freed", 5);
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "macros.hpp"
|
||||
#include "testutil.hpp"
|
||||
|
||||
#if defined ZMQ_HAVE_WINDOWS
|
||||
#include "windows.hpp"
|
||||
@ -50,7 +50,7 @@ void sleep_ (long timeout_)
|
||||
|
||||
void handler (int timer_id, void* arg)
|
||||
{
|
||||
LIBZMQ_UNUSED (timer_id);
|
||||
(void) timer_id; // Stop 'unused' compiler warnings
|
||||
*((bool *)arg) = true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user