From 022db680633b483ec5fab4f6b0722981482b3a02 Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Mon, 17 Jun 2024 13:55:51 -0700 Subject: RpcServer: let system allocate vsock ports This greatly improves stability with concurrent test execution Bug: 285204695 Test: atest --host binder_sdk_test Change-Id: Ib7b76df693288033e55fa27786bf6efb21d0ebf0 --- libs/binder/RpcServer.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'libs/binder/RpcServer.cpp') diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index d9e926a9d5..b8742af1f9 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -71,8 +71,23 @@ status_t RpcServer::setupUnixDomainServer(const char* path) { return setupSocketServer(UnixSocketAddress(path)); } -status_t RpcServer::setupVsockServer(unsigned int bindCid, unsigned int port) { - return setupSocketServer(VsockSocketAddress(bindCid, port)); +status_t RpcServer::setupVsockServer(unsigned bindCid, unsigned port, unsigned* assignedPort) { + auto status = setupSocketServer(VsockSocketAddress(bindCid, port)); + if (status != OK) return status; + + if (assignedPort == nullptr) return OK; + sockaddr_vm addr; + socklen_t len = sizeof(addr); + if (0 != getsockname(mServer.fd.get(), reinterpret_cast(&addr), &len)) { + status = -errno; + ALOGE("setupVsockServer: Failed to getsockname: %s", strerror(-status)); + return status; + } + + LOG_ALWAYS_FATAL_IF(len != sizeof(addr), "Wrong socket type: len %zu vs len %zu", + static_cast(len), sizeof(addr)); + *assignedPort = addr.svm_port; + return OK; } status_t RpcServer::setupInetServer(const char* address, unsigned int port, -- cgit v1.2.3-59-g8ed1b