aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2016-12-14 17:42:15 -0800
committerGarrett D'Amore <garrett@damore.org>2016-12-14 17:42:15 -0800
commite6476c5e4eac773aed4b76f16d3e76e7956c2468 (patch)
tree9bda10aba740ac21aa354e68afde0ed181daee09 /src
parent6a5d5efd3ba1d74ad5f4f200418da0ba83ca9efa (diff)
downloadnng-e6476c5e4eac773aed4b76f16d3e76e7956c2468.tar.gz
nng-e6476c5e4eac773aed4b76f16d3e76e7956c2468.tar.bz2
nng-e6476c5e4eac773aed4b76f16d3e76e7956c2468.zip
Socket sendfilter called.
Diffstat (limited to 'src')
-rw-r--r--src/core/socket.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/core/socket.c b/src/core/socket.c
index 9f6943af..f5904823 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -91,6 +91,8 @@ nni_socket_create(nni_socket_t *sockp, uint16_t proto)
int
nni_socket_close(nni_socket_t sock)
{
+ nni_pipe_t pipe;
+
nni_msgqueue_close(sock->s_urq);
/* XXX: drain this? */
nni_msgqueue_close(sock->s_uwq);
@@ -99,7 +101,19 @@ nni_socket_close(nni_socket_t sock)
/* XXX: protocol shutdown */
+ /*
+ * Paths to pipe close:
+ *
+ * - user calls nng_pipe_close()
+ * - protocol calls pipe_close() after underlying close
+ * - socket calls pipe close due to socket_close (here)
+ */
+
/* XXX: close remaining pipes */
+ while ((pipe = nni_list_first(&sock->nn_pipes)) != NULL) {
+ nni_list_remove(&sock->nn_pipes, pipe);
+ /* XXX: call nni_pipe_close, then nni_pipe_destroy */
+ }
/* XXX: wait for workers to cease activity */
@@ -125,14 +139,12 @@ nni_socket_sendmsg(nni_socket_t sock, nni_msg_t msg, int tmout)
besteffort = sock->s_besteffort;
nni_mutex_exit(sock->s_mx);
-#if 0
- if (s.ops.p_sendhook != NULL) {
- if ((rv = s.ops.p_sendhook(sock->s_proto, msg)) != 0) {
- nni_msg_free(msg);
+ if (sock->s_ops.proto_send_filter != NULL) {
+ msg = sock->s_ops.proto_send_filter(sock->s_data, msg);
+ if (msg == NULL) {
return (0);
}
}
-#endif
if (besteffort) {
/*