diff options
| author | Garrett D'Amore <garrett@damore.org> | 2016-12-22 01:05:43 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2016-12-22 01:05:43 -0800 |
| commit | b92672e20420683e73bfc017956ac6ef2b6b793b (patch) | |
| tree | fb110918430e41a3751ea63801f8acb7c21b7db9 /src/core/socket.h | |
| parent | 0283e8bbef80d42fda1cd9b21e4d14673c3641b8 (diff) | |
| download | nng-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.h | 33 |
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 |
