From 5f635bd3f7909ff8de278f8d84a7cc6b8bba2435 Mon Sep 17 00:00:00 2001 From: Jeff Tao Date: Sat, 23 May 2020 06:02:01 +0000 Subject: [PATCH] tune the TCP socket code --- src/rpc/src/rpcTcp.c | 2 +- src/util/inc/tsocket.h | 1 - src/util/src/tsocket.c | 22 +++++++++++----------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/rpc/src/rpcTcp.c b/src/rpc/src/rpcTcp.c index cef1d68790..a7312fadf1 100644 --- a/src/rpc/src/rpcTcp.c +++ b/src/rpc/src/rpcTcp.c @@ -468,7 +468,7 @@ static void taosFreeFdObj(SFdObj *pFdObj) { pFdObj->signature = NULL; epoll_ctl(pThreadObj->pollFd, EPOLL_CTL_DEL, pFdObj->fd, NULL); - taosCloseTcpSocket(pFdObj->fd); + taosCloseSocket(pFdObj->fd); pThreadObj->numOfFds--; diff --git a/src/util/inc/tsocket.h b/src/util/inc/tsocket.h index 309aa80ef6..97abc16333 100644 --- a/src/util/inc/tsocket.h +++ b/src/util/inc/tsocket.h @@ -31,7 +31,6 @@ int taosOpenUdpSocket(uint32_t localIp, uint16_t localPort); int taosOpenTcpClientSocket(uint32_t ip, uint16_t port, uint32_t localIp); int taosOpenTcpServerSocket(uint32_t ip, uint16_t port); int taosKeepTcpAlive(int sockFd); -void taosCloseTcpSocket(int sockFd); int taosGetFqdn(char *); uint32_t taosGetIpFromFqdn(const char *); diff --git a/src/util/src/tsocket.c b/src/util/src/tsocket.c index efdf752960..f2b89c8243 100644 --- a/src/util/src/tsocket.c +++ b/src/util/src/tsocket.c @@ -305,18 +305,9 @@ int taosOpenTcpClientSocket(uint32_t destIp, uint16_t destPort, uint32_t clientI sockFd = -1; } - return sockFd; -} - -void taosCloseTcpSocket(int sockFd) { - struct linger linger; - linger.l_onoff = 1; - linger.l_linger = 0; - if (taosSetSockOpt(sockFd, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger)) < 0) { - uError("setsockopt SO_LINGER failed: %d (%s)", errno, strerror(errno)); - } + taosKeepTcpAlive(sockFd); - taosCloseSocket(sockFd); + return sockFd; } int taosKeepTcpAlive(int sockFd) { @@ -355,6 +346,15 @@ int taosKeepTcpAlive(int sockFd) { return -1; } + struct linger linger = {0}; + linger.l_onoff = 1; + //linger.l_linger = 0; + if (taosSetSockOpt(sockFd, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger)) < 0) { + uError("setsockopt SO_LINGER failed: %d (%s)", errno, strerror(errno)); + close(sockFd); + return -1; + } + return 0; } -- GitLab