diff options
| author | Garrett D'Amore <garrett@damore.org> | 2016-12-25 19:02:30 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@saucelabs.com> | 2016-12-27 20:42:03 -0800 |
| commit | ca74e80e9b0695a1c374840058025e567189dd14 (patch) | |
| tree | e707312a06fca922dfe97cdcb8b04615282f0875 /src/core/socket.c | |
| parent | 0cd2fa7310f1fdf45443a8a9e3335658b1c3c64c (diff) | |
| download | nng-ca74e80e9b0695a1c374840058025e567189dd14.tar.gz nng-ca74e80e9b0695a1c374840058025e567189dd14.tar.bz2 nng-ca74e80e9b0695a1c374840058025e567189dd14.zip | |
Buffer resizing implemented. (Needed for single threaded inproc tests.)
Diffstat (limited to 'src/core/socket.c')
| -rw-r--r-- | src/core/socket.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/core/socket.c b/src/core/socket.c index ce5dbf3c..91c3c03e 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -447,6 +447,38 @@ nni_getopt_duration(nni_duration *ptr, void *val, size_t *sizep) } +static int +nni_setopt_buf(nni_msgqueue *mq, const void *val, size_t sz) +{ + int len; + + if (sz < sizeof (len)) { + return (NNG_EINVAL); + } + memcpy(&len, val, sizeof (len)); + if (len < 0) { + return (NNG_EINVAL); + } + return (nni_msgqueue_resize(mq, len)); +} + + +static int +nni_getopt_buf(nni_msgqueue *mq, void *val, size_t *sizep) +{ + int len = nni_msgqueue_cap(mq); + + int sz = *sizep; + + if (sz > sizeof (len)) { + sz = sizeof (len); + } + memcpy(val, &len, sz); + *sizep = sizeof (len); + return (0); +} + + int nni_socket_setopt(nni_socket *sock, int opt, const void *val, size_t size) { @@ -478,6 +510,12 @@ nni_socket_setopt(nni_socket *sock, int opt, const void *val, size_t size) case NNG_OPT_RECONN_MAXTIME: rv = nni_setopt_duration(&sock->s_reconnmax, val, size); break; + case NNG_OPT_SNDBUF: + rv = nni_setopt_buf(sock->s_uwq, val, size); + break; + case NNG_OPT_RCVBUF: + rv = nni_setopt_buf(sock->s_urq, val, size); + break; } nni_mutex_exit(&sock->s_mx); return (rv); @@ -515,6 +553,12 @@ nni_socket_getopt(nni_socket *sock, int opt, void *val, size_t *sizep) case NNG_OPT_RECONN_MAXTIME: rv = nni_getopt_duration(&sock->s_reconnmax, val, sizep); break; + case NNG_OPT_SNDBUF: + rv = nni_getopt_buf(sock->s_uwq, val, sizep); + break; + case NNG_OPT_RCVBUF: + rv = nni_getopt_buf(sock->s_urq, val, sizep); + break; } nni_mutex_exit(&sock->s_mx); return (rv); |
