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
a6381890
Commit
a6381890
authored
Aug 16, 2015
by
somdoron
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add methods to handle poller
parent
34968771
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
93 additions
and
1 deletion
+93
-1
zmq.h
include/zmq.h
+5
-1
socket_base.cpp
src/socket_base.cpp
+32
-0
socket_base.hpp
src/socket_base.hpp
+2
-0
zmq.cpp
src/zmq.cpp
+54
-0
No files found.
include/zmq.h
View file @
a6381890
...
...
@@ -383,7 +383,8 @@ ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
ZMQ_EXPORT
int
zmq_send_const
(
void
*
s
,
const
void
*
buf
,
size_t
len
,
int
flags
);
ZMQ_EXPORT
int
zmq_recv
(
void
*
s
,
void
*
buf
,
size_t
len
,
int
flags
);
ZMQ_EXPORT
int
zmq_socket_monitor
(
void
*
s
,
const
char
*
addr
,
int
events
);
ZMQ_EXPORT
int
zmq_add_poller
(
void
*
s
,
void
*
p
);
ZMQ_EXPORT
int
zmq_remove_poller
(
void
*
s
,
void
*
p
);
/******************************************************************************/
/* I/O multiplexing. */
...
...
@@ -397,6 +398,7 @@ ZMQ_EXPORT int zmq_socket_monitor (void *s, const char *addr, int events);
typedef
struct
zmq_pollitem_t
{
void
*
socket
;
void
*
poller
;
#if defined _WIN32
SOCKET
fd
;
#else
...
...
@@ -409,6 +411,8 @@ typedef struct zmq_pollitem_t
#define ZMQ_POLLITEMS_DFLT 16
ZMQ_EXPORT
int
zmq_poll
(
zmq_pollitem_t
*
items
,
int
nitems
,
long
timeout
);
ZMQ_EXPORT
void
*
zmq_poller_new
();
ZMQ_EXPORT
int
zmq_poller_close
(
void
*
p
);
/******************************************************************************/
/* Message proxying */
...
...
src/socket_base.cpp
View file @
a6381890
...
...
@@ -441,6 +441,38 @@ int zmq::socket_base_t::getsockopt (int option_, void *optval_,
return
rc
;
}
int
zmq
::
socket_base_t
::
add_signaler
(
signaler_t
*
s_
)
{
ENTER_MUTEX
();
if
(
!
thread_safe
)
{
errno
=
EINVAL
;
EXIT_MUTEX
();
return
-
1
;
}
((
mailbox_safe_t
*
)
mailbox
)
->
add_signaler
(
s_
);
EXIT_MUTEX
();
return
0
;
}
int
zmq
::
socket_base_t
::
remove_signaler
(
signaler_t
*
s_
)
{
ENTER_MUTEX
();
if
(
!
thread_safe
)
{
errno
=
EINVAL
;
EXIT_MUTEX
();
return
-
1
;
}
((
mailbox_safe_t
*
)
mailbox
)
->
remove_signaler
(
s_
);
EXIT_MUTEX
();
return
0
;
}
int
zmq
::
socket_base_t
::
bind
(
const
char
*
addr_
)
{
ENTER_MUTEX
();
...
...
src/socket_base.hpp
View file @
a6381890
...
...
@@ -90,6 +90,8 @@ namespace zmq
int
term_endpoint
(
const
char
*
addr_
);
int
send
(
zmq
::
msg_t
*
msg_
,
int
flags_
);
int
recv
(
zmq
::
msg_t
*
msg_
,
int
flags_
);
int
add_signaler
(
signaler_t
*
s
);
int
remove_signaler
(
signaler_t
*
s
);
int
close
();
// These functions are used by the polling mechanism to determine
...
...
src/zmq.cpp
View file @
a6381890
...
...
@@ -74,6 +74,7 @@ struct iovec {
#include "msg.hpp"
#include "fd.hpp"
#include "metadata.hpp"
#include "signaler.hpp"
#if !defined ZMQ_HAVE_WINDOWS
#include <unistd.h>
...
...
@@ -561,6 +562,34 @@ int zmq_recviov (void *s_, iovec *a_, size_t *count_, int flags_)
return
nread
;
}
// Add/remove poller from a socket
int
zmq_add_poller
(
void
*
s_
,
void
*
p_
)
{
if
(
!
s_
||
!
((
zmq
::
socket_base_t
*
)
s_
)
->
check_tag
())
{
errno
=
ENOTSOCK
;
return
-
1
;
}
zmq
::
socket_base_t
*
s
=
(
zmq
::
socket_base_t
*
)
s_
;
zmq
::
signaler_t
*
p
=
(
zmq
::
signaler_t
*
)
p_
;
return
s
->
add_signaler
(
p
);
}
int
zmq_remove_poller
(
void
*
s_
,
void
*
p_
)
{
if
(
!
s_
||
!
((
zmq
::
socket_base_t
*
)
s_
)
->
check_tag
())
{
errno
=
ENOTSOCK
;
return
-
1
;
}
zmq
::
socket_base_t
*
s
=
(
zmq
::
socket_base_t
*
)
s_
;
zmq
::
signaler_t
*
p
=
(
zmq
::
signaler_t
*
)
p_
;
return
s
->
remove_signaler
(
p
);
}
// Message manipulators.
int
zmq_msg_init
(
zmq_msg_t
*
msg_
)
...
...
@@ -680,6 +709,31 @@ const char *zmq_msg_gets (zmq_msg_t *msg_, const char *property_)
}
}
// Create poller
void
*
zmq_poller_new
()
{
return
new
zmq
::
signaler_t
();
}
// Close poller
int
zmq_poller_close
(
void
*
p
)
{
zmq
::
signaler_t
*
s
=
(
zmq
::
signaler_t
*
)
p
;
delete
s
;
return
0
;
}
// Get poller fd
zmq
::
fd_t
zmq_poller_get_fd
(
void
*
p
)
{
zmq
::
signaler_t
*
s
=
(
zmq
::
signaler_t
*
)
p
;
return
s
->
get_fd
();
}
// Polling.
int
zmq_poll
(
zmq_pollitem_t
*
items_
,
int
nitems_
,
long
timeout_
)
...
...
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