diff options
author | Ingela Anderton Andin <[email protected]> | 2016-03-01 14:11:28 +0100 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2016-03-01 14:11:28 +0100 |
commit | aa74dd15c39d6b859456aafd78d435763436725d (patch) | |
tree | 201b5c338e4e4afb1181ccff52735073fec6153e /erts/epmd/src/epmd_cli.c | |
parent | 532efc24803e19f47ce19124f4be16a42ac94a75 (diff) | |
parent | 75bc5bebc070a59535b8f6b7b9085c210b4723b5 (diff) | |
download | otp-aa74dd15c39d6b859456aafd78d435763436725d.tar.gz otp-aa74dd15c39d6b859456aafd78d435763436725d.tar.bz2 otp-aa74dd15c39d6b859456aafd78d435763436725d.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/epmd/src/epmd_cli.c')
-rw-r--r-- | erts/epmd/src/epmd_cli.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/erts/epmd/src/epmd_cli.c b/erts/epmd/src/epmd_cli.c index a8fe865d9a..6fc05e153e 100644 --- a/erts/epmd/src/epmd_cli.c +++ b/erts/epmd/src/epmd_cli.c @@ -136,19 +136,33 @@ void epmd_call(EpmdVars *g,int what) static int conn_to_epmd(EpmdVars *g) { struct EPMD_SOCKADDR_IN address; + size_t salen = 0; int connect_sock; - - connect_sock = socket(FAMILY, SOCK_STREAM, 0); - if (connect_sock<0) - goto error; + unsigned short sport = g->port; + +#if defined(EPMD6) + SET_ADDR6(address, in6addr_loopback, sport); + salen = sizeof(struct sockaddr_in6); + + connect_sock = socket(AF_INET6, SOCK_STREAM, 0); + if (connect_sock>=0) { + + if (connect(connect_sock, (struct sockaddr*)&address, salen) == 0) + return connect_sock; - { /* store port number in unsigned short */ - unsigned short sport = g->port; - SET_ADDR(address, EPMD_ADDR_LOOPBACK, sport); + close(connect_sock); } +#endif + SET_ADDR(address, htonl(INADDR_LOOPBACK), sport); + salen = sizeof(struct sockaddr_in); - if (connect(connect_sock, (struct sockaddr*)&address, sizeof address) < 0) + connect_sock = socket(AF_INET, SOCK_STREAM, 0); + if (connect_sock<0) goto error; + + if (connect(connect_sock, (struct sockaddr*)&address, salen) < 0) + goto error; + return connect_sock; error: |