From 5aef7beeaa5f87c6d3b4a926c2a0e64afbe0584d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Sat, 7 Jun 2025 12:06:55 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BB=BA=E9=93=BE?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- services/service/include/relationshipsyncmgr/dm_transport.h | 1 + services/service/src/relationshipsyncmgr/dm_transport.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/services/service/include/relationshipsyncmgr/dm_transport.h b/services/service/include/relationshipsyncmgr/dm_transport.h index 5bc97dfd0..9ac44f449 100644 --- a/services/service/include/relationshipsyncmgr/dm_transport.h +++ b/services/service/include/relationshipsyncmgr/dm_transport.h @@ -56,6 +56,7 @@ private: std::string localSocketName_; std::atomic isSocketSvrCreateFlag_; std::weak_ptr dmCommToolWPtr_; + std::mutex startSocketMtx_; }; } // DistributedHardware } // OHOS diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index ba1832028..9a5102e51 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -374,6 +374,7 @@ void DMTransport::ClearDeviceSocketOpened(const std::string &remoteDevId, int32_ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socketId) { + std::lock_guard lock(startSocketMtx_); if (!IsIdLengthValid(rmtNetworkId)) { return ERR_DM_INPUT_PARA_INVALID; } -- Gitee From 57502e726d6525f14d3119bef7f2df64a1ab4910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Sat, 7 Jun 2025 19:11:45 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- .../relationshipsyncmgr/dm_transport.h | 2 +- .../src/relationshipsyncmgr/dm_transport.cpp | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/services/service/include/relationshipsyncmgr/dm_transport.h b/services/service/include/relationshipsyncmgr/dm_transport.h index 9ac44f449..57e24a358 100644 --- a/services/service/include/relationshipsyncmgr/dm_transport.h +++ b/services/service/include/relationshipsyncmgr/dm_transport.h @@ -56,7 +56,7 @@ private: std::string localSocketName_; std::atomic isSocketSvrCreateFlag_; std::weak_ptr dmCommToolWPtr_; - std::mutex startSocketMtx_; + std::mutex bindSocketMtx_; }; } // DistributedHardware } // OHOS diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index 9a5102e51..4c33322c5 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -374,7 +374,6 @@ void DMTransport::ClearDeviceSocketOpened(const std::string &remoteDevId, int32_ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socketId) { - std::lock_guard lock(startSocketMtx_); if (!IsIdLengthValid(rmtNetworkId)) { return ERR_DM_INPUT_PARA_INVALID; } @@ -383,18 +382,21 @@ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socke return DM_OK; } - int32_t socket = CreateClientSocket(rmtNetworkId); - if (socket < DM_OK) { - LOGE("StartSocket failed, ret: %{public}d", socket); - return ERR_DM_FAILED; - } + { + std::lock_guard lock(bindSocketMtx_); + int32_t socket = CreateClientSocket(rmtNetworkId); + if (socket < DM_OK) { + LOGE("StartSocket failed, ret: %{public}d", socket); + return ERR_DM_FAILED; + } - int32_t ret = Bind(socket, g_qosInfo, g_qosTvParamIndex, &iSocketListener); - if (ret < DM_OK) { - LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", - GetAnonyString(rmtNetworkId).c_str(), socket, ret); - Shutdown(socket); - return ERR_DM_FAILED; + int32_t ret = Bind(socket, g_qosInfo, g_qosTvParamIndex, &iSocketListener); + if (ret < DM_OK) { + LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", + GetAnonyString(rmtNetworkId).c_str(), socket, ret); + Shutdown(socket); + return ERR_DM_FAILED; + } } LOGI("Bind Socket success, rmtNetworkId:%{public}s, socketId: %{public}d", -- Gitee From a7096d1749b6b36f7fcd68487f84d09bf3b496fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Mon, 9 Jun 2025 10:42:24 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- .../relationshipsyncmgr/dm_transport.h | 1 - .../src/relationshipsyncmgr/dm_transport.cpp | 25 ++++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/services/service/include/relationshipsyncmgr/dm_transport.h b/services/service/include/relationshipsyncmgr/dm_transport.h index 57e24a358..5bc97dfd0 100644 --- a/services/service/include/relationshipsyncmgr/dm_transport.h +++ b/services/service/include/relationshipsyncmgr/dm_transport.h @@ -56,7 +56,6 @@ private: std::string localSocketName_; std::atomic isSocketSvrCreateFlag_; std::weak_ptr dmCommToolWPtr_; - std::mutex bindSocketMtx_; }; } // DistributedHardware } // OHOS diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index 4c33322c5..0424df6fd 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -13,6 +13,8 @@ * limitations under the License. */ +#include "softbus_error_code.h" + #include "dm_transport.h" #include "dm_anonymous.h" #include "dm_comm_tool.h" @@ -382,21 +384,20 @@ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socke return DM_OK; } - { - std::lock_guard lock(bindSocketMtx_); - int32_t socket = CreateClientSocket(rmtNetworkId); - if (socket < DM_OK) { - LOGE("StartSocket failed, ret: %{public}d", socket); - return ERR_DM_FAILED; - } + int32_t socket = CreateClientSocket(rmtNetworkId); + if (socket < DM_OK) { + LOGE("StartSocket failed, ret: %{public}d", socket); + return ERR_DM_FAILED; + } - int32_t ret = Bind(socket, g_qosInfo, g_qosTvParamIndex, &iSocketListener); - if (ret < DM_OK) { - LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", - GetAnonyString(rmtNetworkId).c_str(), socket, ret); + int32_t ret = Bind(socket, g_qosInfo, g_qosTvParamIndex, &iSocketListener); + if (ret < DM_OK) { + LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", + GetAnonyString(rmtNetworkId).c_str(), socket, ret); + if (ret != SOFTBUS_TRANS_SOCKET_IN_USE) { Shutdown(socket); - return ERR_DM_FAILED; } + return ERR_DM_FAILED; } LOGI("Bind Socket success, rmtNetworkId:%{public}s, socketId: %{public}d", -- Gitee From 279967412b61b711e7f4bc8e6d617d429547ee7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Mon, 9 Jun 2025 11:03:26 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- services/service/src/relationshipsyncmgr/dm_transport.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index 0424df6fd..42a15ee5a 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -13,8 +13,6 @@ * limitations under the License. */ -#include "softbus_error_code.h" - #include "dm_transport.h" #include "dm_anonymous.h" #include "dm_comm_tool.h" @@ -22,6 +20,7 @@ #include "dm_log.h" #include "dm_softbus_cache.h" #include "dm_transport_msg.h" +#include "softbus_error_code.h" namespace OHOS { namespace DistributedHardware { -- Gitee From 6c2084152c13e41b9c02334f75aa47b8c57fd5ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Mon, 9 Jun 2025 17:03:15 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- services/service/src/relationshipsyncmgr/dm_transport.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index 42a15ee5a..8ee0ec4bb 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -391,11 +391,13 @@ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socke int32_t ret = Bind(socket, g_qosInfo, g_qosTvParamIndex, &iSocketListener); if (ret < DM_OK) { + if (ret == SOFTBUS_TRANS_SOCKET_IN_USE) { + LOGI("Softbus trans socket in use."); + return DM_OK; + } LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", GetAnonyString(rmtNetworkId).c_str(), socket, ret); - if (ret != SOFTBUS_TRANS_SOCKET_IN_USE) { - Shutdown(socket); - } + Shutdown(socket); return ERR_DM_FAILED; } -- Gitee From c85a0d954079f401b1b7d344fd0ae73a1e7c1157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Mon, 9 Jun 2025 18:44:57 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- services/service/src/relationshipsyncmgr/dm_transport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index 8ee0ec4bb..e78125d88 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -393,6 +393,7 @@ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socke if (ret < DM_OK) { if (ret == SOFTBUS_TRANS_SOCKET_IN_USE) { LOGI("Softbus trans socket in use."); + socketId = socket; return DM_OK; } LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", -- Gitee From e0d798d19dea529b7c717d8bfd31829658025ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Mon, 9 Jun 2025 22:40:01 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- common/include/dm_error_type.h | 1 + .../relationshipsyncmgr/dm_transport.h | 1 + .../src/relationshipsyncmgr/dm_comm_tool.cpp | 3 ++- .../src/relationshipsyncmgr/dm_transport.cpp | 24 ++++++++++++++++--- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/common/include/dm_error_type.h b/common/include/dm_error_type.h index a22dffc64..cd5225aed 100644 --- a/common/include/dm_error_type.h +++ b/common/include/dm_error_type.h @@ -141,6 +141,7 @@ enum { ERR_DM_GET_PARAM_FAILED = 969298352, ERR_DM_VERIFY_SAME_ACCOUNT_FAILED = 969298353, ERR_DM_DEVICE_FREEZED = 969298355, + ERR_DM_SOCKET_IN_USED = 969298356, }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/service/include/relationshipsyncmgr/dm_transport.h b/services/service/include/relationshipsyncmgr/dm_transport.h index 5bc97dfd0..68eea2a4c 100644 --- a/services/service/include/relationshipsyncmgr/dm_transport.h +++ b/services/service/include/relationshipsyncmgr/dm_transport.h @@ -46,6 +46,7 @@ private: std::string GetRemoteNetworkIdBySocketId(int32_t socketId); void ClearDeviceSocketOpened(const std::string &remoteDevId, int32_t socketId); void HandleReceiveMessage(const int32_t socketId, const std::string &payload); + int32_t StartSocketInner(const std::string &rmtNetworkId, int32_t &socketId); private: std::mutex rmtSocketIdMtx_; diff --git a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp index 77ecde4ca..8db9d4edf 100644 --- a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp +++ b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp @@ -605,7 +605,7 @@ void DMCommTool::ProcessReceiveRspAppUnbindEvent(const std::shared_ptrdmTransportPtr_->StopSocket(commMsg->remoteNetworkId); + this->dmTransportPtr_->StopSocket(commMsg->remoteNetworkId); std::string rmtUdid = ""; SoftbusCache::GetInstance().GetUdidFromCache(commMsg->remoteNetworkId.c_str(), rmtUdid); if (rmtUdid.empty()) { @@ -844,6 +844,7 @@ int32_t DMCommTool::SendLogoutAccountInfo(const std::string &rmtNetworkId, void DMCommTool::ProcessReceiveLogoutEvent(const std::shared_ptr commMsg) { CHECK_NULL_VOID(commMsg); + this->dmTransportPtr_->StopSocket(commMsg->remoteNetworkId); LOGI("Receive remote logout, networkId: %{public}s", GetAnonyString(commMsg->remoteNetworkId).c_str()); std::string rmtUdid = ""; SoftbusCache::GetInstance().GetUdidFromCache(commMsg->remoteNetworkId.c_str(), rmtUdid); diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index e78125d88..afdc31969 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -29,6 +29,7 @@ namespace { constexpr uint32_t MAX_SEND_MSG_LENGTH = 4 * 1024 * 1024; constexpr uint32_t INTERCEPT_STRING_LENGTH = 20; constexpr uint32_t MAX_ROUND_SIZE = 1000; +constexpr int32_t BIND_SOCKET_INTERVAL_MS = 200000; // 200ms static QosTV g_qosInfo[] = { { .qos = QOS_TYPE_MIN_BW, .value = 256 * 1024}, { .qos = QOS_TYPE_MAX_LATENCY, .value = 8000 }, @@ -374,13 +375,31 @@ void DMTransport::ClearDeviceSocketOpened(const std::string &remoteDevId, int32_ } int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socketId) +{ + int32_t errCode = ERR_DM_FAILED; + int32_t count = 0; + const int32_t maxCount = 10; + + do { + errCode = StartSocketInner(rmtNetworkId, socketId); + if (errCode != ERR_DM_SOCKET_IN_USED) { + break; + } + count++; + usleep(BIND_SOCKET_INTERVAL_MS); + } while (count < maxCount); + + return errCode; +} + +int32_t DMTransport::StartSocketInner(const std::string &rmtNetworkId, int32_t &socketId) { if (!IsIdLengthValid(rmtNetworkId)) { return ERR_DM_INPUT_PARA_INVALID; } if (IsDeviceSessionOpened(rmtNetworkId, socketId)) { LOGE("Softbus session has already opened, deviceId: %{public}s", GetAnonyString(rmtNetworkId).c_str()); - return DM_OK; + return ERR_DM_SOCKET_IN_USED; } int32_t socket = CreateClientSocket(rmtNetworkId); @@ -393,8 +412,7 @@ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socke if (ret < DM_OK) { if (ret == SOFTBUS_TRANS_SOCKET_IN_USE) { LOGI("Softbus trans socket in use."); - socketId = socket; - return DM_OK; + return ERR_DM_SOCKET_IN_USED; } LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", GetAnonyString(rmtNetworkId).c_str(), socket, ret); -- Gitee From f0a6f7cb3c84b1dffbf3d3bd233e51cda74e36e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Mon, 9 Jun 2025 22:44:17 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 史晓晓 --- services/service/src/relationshipsyncmgr/dm_comm_tool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp index 8db9d4edf..8ea23eb3a 100644 --- a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp +++ b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp @@ -605,7 +605,7 @@ void DMCommTool::ProcessReceiveRspAppUnbindEvent(const std::shared_ptrdmTransportPtr_->StopSocket(commMsg->remoteNetworkId); + this->dmTransportPtr_->StopSocket(commMsg->remoteNetworkId); std::string rmtUdid = ""; SoftbusCache::GetInstance().GetUdidFromCache(commMsg->remoteNetworkId.c_str(), rmtUdid); if (rmtUdid.empty()) { -- Gitee