aboutsummaryrefslogtreecommitdiff
path: root/src/core/socket.h
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2016-12-22 01:05:43 -0800
committerGarrett D'Amore <garrett@damore.org>2016-12-22 01:05:43 -0800
commitb92672e20420683e73bfc017956ac6ef2b6b793b (patch)
treefb110918430e41a3751ea63801f8acb7c21b7db9 /src/core/socket.h
parent0283e8bbef80d42fda1cd9b21e4d14673c3641b8 (diff)
downloadnng-b92672e20420683e73bfc017956ac6ef2b6b793b.tar.gz
nng-b92672e20420683e73bfc017956ac6ef2b6b793b.tar.bz2
nng-b92672e20420683e73bfc017956ac6ef2b6b793b.zip
Logic for socket shutdown, cleanup, and draining figured out.
There's work to do still, but I've left clear indications of the design in comments. Some ugly mysteries are now solved.
Diffstat (limited to 'src/core/socket.h')
-rw-r--r--src/core/socket.h33
1 files changed, 14 insertions, 19 deletions
diff --git a/src/core/socket.h b/src/core/socket.h
index da531836..366e9958 100644
--- a/src/core/socket.h
+++ b/src/core/socket.h
@@ -10,42 +10,37 @@
#ifndef CORE_SOCKET_H
#define CORE_SOCKET_H
-/*
- * NB: This structure is supplied here for use by the CORE. Use of this library
- * OUSIDE of the core is STRICTLY VERBOTEN. NO DIRECT ACCESS BY PROTOCOLS OR
- * TRANSPORTS.
- */
+// NB: This structure is supplied here for use by the CORE. Use of this library
+// OUSIDE of the core is STRICTLY VERBOTEN. NO DIRECT ACCESS BY PROTOCOLS OR
+// TRANSPORTS.
struct nng_socket {
nni_mutex_t s_mx;
+ nni_cond_t s_cv;
- nni_msgqueue_t s_uwq; /* Upper write queue. */
- nni_msgqueue_t s_urq; /* Upper read queue. */
+ nni_msgqueue_t s_uwq; // Upper write queue
+ nni_msgqueue_t s_urq; // Upper read queue
struct nni_protocol s_ops;
- void * s_data; /* Protocol private. */
+ void * s_data; // Protocol private
- /* options */
+ /* XXX: options */
nni_list_t s_eps;
nni_list_t s_pipes;
- int s_besteffort; /* Best effort mode delivery. */
- int s_senderr; /* Protocol state machine use. */
+ int s_closing; // Socket is closing
+ int s_besteffort; // Best effort mode delivery
+ int s_senderr; // Protocol state machine use
};
-/*
- * Internally used socket API. Again, this stuff is not part of our public
- * API.
- */
-
extern int nni_socket_create(nni_socket_t *, uint16_t);
extern int nni_socket_close(nni_socket_t);
extern int nni_socket_add_pipe(nni_socket_t, nni_pipe_t);
-extern void nni_socket_remove_pipe(nni_socket_t, nni_pipe_t);
-extern uint16_t nni_socket_protocol(nni_socket_t);
+extern void nni_socket_rem_pipe(nni_socket_t, nni_pipe_t);
+extern uint16_t nni_socket_proto(nni_socket_t);
extern int nni_socket_setopt(nni_socket_t, int, const void *, size_t);
extern int nni_socket_getopt(nni_socket_t, int, void *, size_t *);
-#endif /* CORE_SOCKET_H */
+#endif // CORE_SOCKET_H