aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/nifs/common/socket_nif.c
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2018-05-08 16:49:58 +0200
committerMicael Karlberg <[email protected]>2018-09-18 13:01:37 +0200
commit83dd8317ea3534fb9353f0d5159a0b1cb485f38c (patch)
tree04c39e17a2ef0dea4ed4db6cf5c11c737028cec1 /erts/emulator/nifs/common/socket_nif.c
parent0f2b8a76edaa462fca388a55eaf449a36296820a (diff)
downloadotp-83dd8317ea3534fb9353f0d5159a0b1cb485f38c.tar.gz
otp-83dd8317ea3534fb9353f0d5159a0b1cb485f38c.tar.bz2
otp-83dd8317ea3534fb9353f0d5159a0b1cb485f38c.zip
[socket-nif] setopt for socket option(s) rcvbuf and sndnuf
Diffstat (limited to 'erts/emulator/nifs/common/socket_nif.c')
-rw-r--r--erts/emulator/nifs/common/socket_nif.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/erts/emulator/nifs/common/socket_nif.c b/erts/emulator/nifs/common/socket_nif.c
index f9727d41b1..eee96ee844 100644
--- a/erts/emulator/nifs/common/socket_nif.c
+++ b/erts/emulator/nifs/common/socket_nif.c
@@ -364,7 +364,9 @@ typedef union {
#define SOCKET_OPT_SOCK_KEEPALIVE 9
#define SOCKET_OPT_SOCK_LINGER 10
#define SOCKET_OPT_SOCK_PRIORITY 16
+#define SOCKET_OPT_SOCK_RCVBUF 17
#define SOCKET_OPT_SOCK_REUSEADDR 21
+#define SOCKET_OPT_SOCK_SNDBUF 27
#define SOCKET_OPT_IP_RECVTOS 25
#define SOCKET_OPT_IP_ROUTER_ALERT 28
@@ -3486,6 +3488,20 @@ BOOLEAN_T eoptval2optval_socket(ErlNifEnv* env,
break;
#endif
+#if defined(SO_RCVBUF)
+ case SOCKET_OPT_SOCK_RCVBUF:
+ if (GET_INT(env, eVal, &valP->u.intVal)) {
+ valP->tag = SOCKET_OPT_VALUE_INT;
+ *opt = SO_RCVBUF;
+ return TRUE;
+ } else {
+ *opt = -1;
+ valP->tag = SOCKET_OPT_VALUE_UNDEF;
+ return FALSE;
+ }
+ break;
+#endif
+
#if defined(SO_REUSEADDR)
case SOCKET_OPT_SOCK_REUSEADDR:
{
@@ -3505,6 +3521,20 @@ BOOLEAN_T eoptval2optval_socket(ErlNifEnv* env,
break;
#endif
+#if defined(SO_SNDBUF)
+ case SOCKET_OPT_SOCK_SNDBUF:
+ if (GET_INT(env, eVal, &valP->u.intVal)) {
+ valP->tag = SOCKET_OPT_VALUE_INT;
+ *opt = SO_SNDBUF;
+ return TRUE;
+ } else {
+ *opt = -1;
+ valP->tag = SOCKET_OPT_VALUE_UNDEF;
+ return FALSE;
+ }
+ break;
+#endif
+
default:
*opt = -1;
valP->tag = SOCKET_OPT_VALUE_UNDEF;