Avoid a memcpy in monitor_t

This commit is contained in:
Richard Newton 2013-06-28 12:34:18 +01:00
parent b34444d273
commit 61a21bb082

31
zmq.hpp
View File

@ -438,7 +438,6 @@ namespace zmq
if (rc != 0) if (rc != 0)
throw error_t (); throw error_t ();
zmq_event_t event;
void *s = zmq_socket (socket.ctxptr, ZMQ_PAIR); void *s = zmq_socket (socket.ctxptr, ZMQ_PAIR);
assert (s); assert (s);
@ -448,43 +447,45 @@ namespace zmq
zmq_msg_t msg; zmq_msg_t msg;
zmq_msg_init (&msg); zmq_msg_init (&msg);
rc = zmq_recvmsg (s, &msg, 0); rc = zmq_recvmsg (s, &msg, 0);
if (rc == -1 && zmq_errno() == ETERM) break; if (rc == -1 && zmq_errno() == ETERM)
break;
assert (rc != -1); assert (rc != -1);
memcpy (&event, zmq_msg_data (&msg), sizeof (event));
zmq_event_t* event = static_cast<zmq_event_t*>(zmq_msg_data (&msg));
switch (event.event) { switch (event->event) {
case ZMQ_EVENT_CONNECTED: case ZMQ_EVENT_CONNECTED:
on_event_connected(event.data.connected.addr); on_event_connected(event->data.connected.addr);
break; break;
case ZMQ_EVENT_CONNECT_DELAYED: case ZMQ_EVENT_CONNECT_DELAYED:
on_event_connect_delayed(event.data.connect_delayed.addr); on_event_connect_delayed(event->data.connect_delayed.addr);
break; break;
case ZMQ_EVENT_CONNECT_RETRIED: case ZMQ_EVENT_CONNECT_RETRIED:
on_event_connect_retried(event.data.connect_retried.addr); on_event_connect_retried(event->data.connect_retried.addr);
break; break;
case ZMQ_EVENT_LISTENING: case ZMQ_EVENT_LISTENING:
on_event_listening(event.data.listening.addr); on_event_listening(event->data.listening.addr);
break; break;
case ZMQ_EVENT_BIND_FAILED: case ZMQ_EVENT_BIND_FAILED:
on_event_bind_failed(event.data.bind_failed.addr); on_event_bind_failed(event->data.bind_failed.addr);
break; break;
case ZMQ_EVENT_ACCEPTED: case ZMQ_EVENT_ACCEPTED:
on_event_accepted(event.data.accepted.addr); on_event_accepted(event->data.accepted.addr);
break; break;
case ZMQ_EVENT_ACCEPT_FAILED: case ZMQ_EVENT_ACCEPT_FAILED:
on_event_accept_failed(event.data.accept_failed.addr); on_event_accept_failed(event->data.accept_failed.addr);
break; break;
case ZMQ_EVENT_CLOSED: case ZMQ_EVENT_CLOSED:
on_event_closed(event.data.closed.addr); on_event_closed(event->data.closed.addr);
break; break;
case ZMQ_EVENT_CLOSE_FAILED: case ZMQ_EVENT_CLOSE_FAILED:
on_event_close_failed(event.data.close_failed.addr); on_event_close_failed(event->data.close_failed.addr);
break; break;
case ZMQ_EVENT_DISCONNECTED: case ZMQ_EVENT_DISCONNECTED:
on_event_disconnected(event.data.disconnected.addr); on_event_disconnected(event->data.disconnected.addr);
break; break;
default: default:
on_event_unknown(event.event); on_event_unknown(event->event);
break; break;
} }
zmq_msg_close (&msg); zmq_msg_close (&msg);