From 442907b0f89717bc72cd9b07ce06ebfceb0ce89d Mon Sep 17 00:00:00 2001 From: Keith Mok Date: Wed, 11 Oct 2023 20:36:18 +0000 Subject: RPC binder: set TCP_NDELAY System by default cache TCP data trying to pack more data before sending out to the wire, this cause delay in rpc communication. Currently we set TCP_NDELAY in RpcSession, but not in RpcServer. This CL add TCP_NDELAY to RpcServer also. Bug: 304823925 Test: manual Change-Id: I8bfda370a78eff9b8e0ab75e6bc2fd0a5ba743ed --- libs/binder/RpcServer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libs/binder/RpcServer.cpp') diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index 55fc16de45..03dad2baca 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -17,6 +17,7 @@ #define LOG_TAG "RpcServer" #include +#include #include #include #include @@ -572,6 +573,17 @@ status_t RpcServer::setupSocketServer(const RpcSocketAddress& addr) { return -savedErrno; } + if (addr.addr()->sa_family == AF_INET || addr.addr()->sa_family == AF_INET6) { + int noDelay = 1; + int result = + setsockopt(socket_fd.get(), IPPROTO_TCP, TCP_NODELAY, &noDelay, sizeof(noDelay)); + if (result < 0) { + int savedErrno = errno; + ALOGE("Could not set TCP_NODELAY on %s", strerror(savedErrno)); + return -savedErrno; + } + } + { RpcMutexLockGuard _l(mLock); if (mServerSocketModifier != nullptr) { -- cgit v1.2.3-59-g8ed1b