diff options
author | Erlang/OTP <otp@erlang.org> | 2021-11-11 16:36:33 +0100 |
---|---|---|
committer | Erlang/OTP <otp@erlang.org> | 2021-11-11 16:36:33 +0100 |
commit | 7b20a6c668ab6d34b07f8e765fbb26b742a056c6 (patch) | |
tree | b75066f5396643e77d596d63115c2e3f165c97d8 /erts/emulator | |
parent | 9147fffe70ba3e112c6fb30e2c0389243b29cc1d (diff) | |
parent | d28a16e03250aca693284f21107d6fd39f6da29a (diff) | |
download | erlang-7b20a6c668ab6d34b07f8e765fbb26b742a056c6.tar.gz |
Merge branch 'raimo/linux-dgram-reconnect/GH-5279/OTP-17736' into maint-24
* raimo/linux-dgram-reconnect/GH-5279/OTP-17736:
Fix incorrect testcase skip
Disconnect only if connected
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/drivers/common/inet_drv.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 46e73c8b83..00421d0c73 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -12635,15 +12635,19 @@ static ErlDrvSSizeT packet_inet_ctl(ErlDrvData e, unsigned int cmd, char* buf, * change the source address when connecting * a datagram socket to a new destination */ - sock_connect(desc->s, &disassoc_sa, disassoc_sa_size); + if (IS_CONNECTED(desc)) { + /* Dissolve association */ + (void) sock_connect(desc->s, &disassoc_sa, disassoc_sa_size); + } #endif /* #ifdef __linux__ */ code = sock_connect(desc->s, (struct sockaddr*) &desc->remote, len); if (IS_SOCKET_ERROR(code)) { - sock_connect(desc->s, &disassoc_sa, disassoc_sa_size); + code = sock_errno(), + (void) sock_connect(desc->s, &disassoc_sa, disassoc_sa_size); desc->state &= ~INET_F_ACTIVE; - return ctl_error(sock_errno(), rbuf, rsize); + return ctl_error(code, rbuf, rsize); } else /* ok we are connected */ { enq_async(desc, tbuf, INET_REQ_CONNECT); |