diff options
author | Micael Karlberg <[email protected]> | 2018-05-08 12:58:56 +0200 |
---|---|---|
committer | Micael Karlberg <[email protected]> | 2018-09-18 13:01:37 +0200 |
commit | 7bc2d3e8618f561185694ae11afe4fc83b1f72f3 (patch) | |
tree | dab9fe311fa471717041ce7fe32707cf38622f7f /erts/emulator/nifs/common/socket_nif.c | |
parent | d6b051d9b09aeba00d1bbd0d448dde6e551c4442 (diff) | |
download | otp-7bc2d3e8618f561185694ae11afe4fc83b1f72f3.tar.gz otp-7bc2d3e8618f561185694ae11afe4fc83b1f72f3.tar.bz2 otp-7bc2d3e8618f561185694ae11afe4fc83b1f72f3.zip |
[socket-nif] setopt of socket option reuseaddr
Diffstat (limited to 'erts/emulator/nifs/common/socket_nif.c')
-rw-r--r-- | erts/emulator/nifs/common/socket_nif.c | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/erts/emulator/nifs/common/socket_nif.c b/erts/emulator/nifs/common/socket_nif.c index 14d7cd2611..843543b42b 100644 --- a/erts/emulator/nifs/common/socket_nif.c +++ b/erts/emulator/nifs/common/socket_nif.c @@ -359,8 +359,9 @@ typedef union { #define SOCKET_OPT_OTP_DEBUG 0 #define SOCKET_OPT_OTP_IOW 1 -#define SOCKET_OPT_SOCK_KEEPALIVE 0 -#define SOCKET_OPT_SOCK_LINGER 1 +#define SOCKET_OPT_SOCK_KEEPALIVE 9 +#define SOCKET_OPT_SOCK_LINGER 10 +#define SOCKET_OPT_SOCK_REUSEADDR 21 #define SOCKET_OPT_IP_RECVTOS 0 #define SOCKET_OPT_IP_ROUTER_ALERT 1 @@ -3396,22 +3397,22 @@ BOOLEAN_T eoptval2optval_socket(ErlNifEnv* env, { switch (eOpt) { #if defined(SO_KEEPALIVE) - case SOCKET_OPT_SOCK_KEEPALIVE: - { - BOOLEAN_T val; + case SOCKET_OPT_SOCK_KEEPALIVE: + { + BOOLEAN_T val; - if (decode_bool(env, eVal, &val)) { - *opt = SO_KEEPALIVE; - valP->tag = SOCKET_OPT_VALUE_INT; - valP->u.intVal = (val) ? 1 : 0; - return TRUE; - } else { - *opt = -1; - valP->tag = SOCKET_OPT_VALUE_UNDEF; - return FALSE; - } + if (decode_bool(env, eVal, &val)) { + *opt = SO_KEEPALIVE; + valP->tag = SOCKET_OPT_VALUE_INT; + valP->u.intVal = (val) ? 1 : 0; + return TRUE; + } else { + *opt = -1; + valP->tag = SOCKET_OPT_VALUE_UNDEF; + return FALSE; } - break; + } + break; #endif #if defined(SO_LINGER) @@ -3430,6 +3431,25 @@ BOOLEAN_T eoptval2optval_socket(ErlNifEnv* env, break; #endif +#if defined(SO_REUSEADDR) + case SOCKET_OPT_SOCK_REUSEADDR: + { + BOOLEAN_T val; + + if (decode_bool(env, eVal, &val)) { + *opt = SO_REUSEADDR; + valP->tag = SOCKET_OPT_VALUE_INT; + valP->u.intVal = (val) ? 1 : 0; + return TRUE; + } else { + *opt = -1; + valP->tag = SOCKET_OPT_VALUE_UNDEF; + return FALSE; + } + } + break; +#endif + default: *opt = -1; valP->tag = SOCKET_OPT_VALUE_UNDEF; |