diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 2a8868353..37caf75e1 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -76,12 +76,12 @@ void JoinerRouter::HandleStateChanged(otChangedFlags aFlags) VerifyOrExit(Get().IsFullThreadDevice()); VerifyOrExit(aFlags & OT_CHANGED_THREAD_NETDATA); - Get().RemoveUnsecurePort(mSocket.GetSockName().mPort); - if (Get().IsJoiningEnabled()) { Ip6::SockAddr sockaddr; + VerifyOrExit(!mSocket.IsBound()); + sockaddr.mPort = GetJoinerUdpPort(); mSocket.Open(&JoinerRouter::HandleUdpReceive, this); @@ -91,6 +91,8 @@ void JoinerRouter::HandleStateChanged(otChangedFlags aFlags) } else { + Get().RemoveUnsecurePort(mSocket.GetSockName().mPort); + mSocket.Close(); }