From 64168a15c5616f4b9295fc71c55e84208fcde34a 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 23:23:21 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BB=BA=E9=93=BE?= =?UTF-8?q?=E9=87=8D=E5=85=A5=E9=97=AE=E9=A2=98?= 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 | 1 + .../src/relationshipsyncmgr/dm_transport.cpp | 26 ++++++++++++++++++- 4 files changed, 28 insertions(+), 1 deletion(-) 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 56111b691..dfcd7c464 100644 --- a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp +++ b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp @@ -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 ba1832028..afdc31969 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -20,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 { @@ -28,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 }, @@ -373,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); @@ -390,6 +410,10 @@ 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 ERR_DM_SOCKET_IN_USED; + } LOGE("OpenSession fail, rmtNetworkId: %{public}s, socket: %{public}d, ret: %{public}d", GetAnonyString(rmtNetworkId).c_str(), socket, ret); Shutdown(socket); -- Gitee From 8091577ed58575f14a038efb10f946ac786d1652 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 15:55:08 +0000 Subject: [PATCH 2/4] update services/service/src/relationshipsyncmgr/dm_comm_tool.cpp. 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 | 1 + 1 file changed, 1 insertion(+) diff --git a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp index dfcd7c464..40d8dbf99 100644 --- a/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp +++ b/services/service/src/relationshipsyncmgr/dm_comm_tool.cpp @@ -844,6 +844,7 @@ int32_t DMCommTool::SendLogoutAccountInfo(const std::string &rmtNetworkId, void DMCommTool::ProcessReceiveLogoutEvent(const std::shared_ptr commMsg) { CHECK_NULL_VOID(commMsg); + CHECK_NULL_VOID(dmTransportPtr_); this->dmTransportPtr_->StopSocket(commMsg->remoteNetworkId); LOGI("Receive remote logout, networkId: %{public}s", GetAnonyString(commMsg->remoteNetworkId).c_str()); std::string rmtUdid = ""; -- Gitee From ecd2d3839765504f68b05e3698c574b8fab9111b 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 16:15:56 +0000 Subject: [PATCH 3/4] update services/service/src/relationshipsyncmgr/dm_transport.cpp. 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index afdc31969..74a311339 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 + #include "dm_transport.h" #include "dm_anonymous.h" #include "dm_comm_tool.h" -- Gitee From b6fdde59604201f490dfa4f2abd2ba26a547fefe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E6=99=93=E6=99=93?= Date: Tue, 10 Jun 2025 00:29:04 +0800 Subject: [PATCH 4/4] =?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 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/service/src/relationshipsyncmgr/dm_transport.cpp b/services/service/src/relationshipsyncmgr/dm_transport.cpp index 74a311339..1bacbcc78 100644 --- a/services/service/src/relationshipsyncmgr/dm_transport.cpp +++ b/services/service/src/relationshipsyncmgr/dm_transport.cpp @@ -31,7 +31,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 +const int32_t USLEEP_TIME_US_200000 = 200000; // 200ms static QosTV g_qosInfo[] = { { .qos = QOS_TYPE_MIN_BW, .value = 256 * 1024}, { .qos = QOS_TYPE_MAX_LATENCY, .value = 8000 }, @@ -388,7 +388,7 @@ int32_t DMTransport::StartSocket(const std::string &rmtNetworkId, int32_t &socke break; } count++; - usleep(BIND_SOCKET_INTERVAL_MS); + usleep(USLEEP_TIME_US_200000); } while (count < maxCount); return errCode; -- Gitee