diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg index 3f7ece8826c7dd90f47d6557e89acaeb93d23982..2cd7af1dd3728f44bf027fb8c2d1af75d92cb6ba 100644 --- a/packaging/cfg/taos.cfg +++ b/packaging/cfg/taos.cfg @@ -54,8 +54,9 @@ # interval of system monitor # monitorInterval 60 -# set socket type(UDP by default). if udpsocket is 0, TCP is applied for all connections -# udpsocket 1 +# set socket type("udp" and "tcp"). +# The server and client should have the same socket type. Otherwise, connect will fail. +# sockettype udp # RPC re-try timer, millisecond # rpcTimer 300 diff --git a/src/client/src/tscSystem.c b/src/client/src/tscSystem.c index ff0c1555ffc7e17ca36c7ea5aadb0a8d7090540c..ecb21db4de89b1f49870cc8ca046fbe9a98f582d 100644 --- a/src/client/src/tscSystem.c +++ b/src/client/src/tscSystem.c @@ -174,6 +174,7 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) { SGlobalConfig *cfg_locale = tsGetConfigOption("locale"); SGlobalConfig *cfg_charset = tsGetConfigOption("charset"); SGlobalConfig *cfg_timezone = tsGetConfigOption("timezone"); + SGlobalConfig *cfg_socket = tsGetConfigOption("sockettype"); switch (option) { case TSDB_OPTION_CONFIGDIR: @@ -304,6 +305,20 @@ int taos_options(TSDB_OPTION option, const void *arg, ...) { tsCfgStatusStr[cfg_timezone->cfgStatus], (char *)cfg_timezone->ptr); } break; + + case TSDB_OPTION_SOCKET_TYPE: + if (cfg_socket && cfg_socket->cfgStatus <= TSDB_CFG_CSTATUS_OPTION) { + if (strcasecmp(arg, TAOS_SOCKET_TYPE_NAME_UDP) != 0 && strcasecmp(arg, TAOS_SOCKET_TYPE_NAME_TCP) != 0) { + tscError("only 'tcp' or 'udp' allowed for configuring the socket type"); + return -1; + } + + strncpy(tsSocketType, arg, tListLen(tsSocketType)); + cfg_socket->cfgStatus = TSDB_CFG_CSTATUS_OPTION; + tscPrint("socket type is set:%s", tsSocketType); + } + break; + default: tscError("Invalid option %d", option); return -1; diff --git a/src/inc/taos.h b/src/inc/taos.h index bee0dcab1cf9c86e8365da412ff9d01799620936..3af3a0ab75506d1c6608978478a669e827bfeef1 100644 --- a/src/inc/taos.h +++ b/src/inc/taos.h @@ -46,6 +46,7 @@ typedef enum { TSDB_OPTION_TIMEZONE, TSDB_OPTION_CONFIGDIR, TSDB_OPTION_SHELL_ACTIVITY_TIMER, + TSDB_OPTION_SOCKET_TYPE, TSDB_MAX_OPTIONS } TSDB_OPTION; diff --git a/src/inc/tglobalcfg.h b/src/inc/tglobalcfg.h index 054317fcaeabe94a80d3ac2b730f1e27b5ccbf4d..95a3cc57e24b14aa842d802db3187ff10f3362a7 100644 --- a/src/inc/tglobalcfg.h +++ b/src/inc/tglobalcfg.h @@ -132,7 +132,7 @@ extern int tsStreamCompRetryDelay; extern int tsProjectExecInterval; extern int64_t tsMaxRetentWindow; -extern int tsUDPSocket; +extern char tsSocketType[4]; extern char tsHttpIp[]; extern short tsHttpPort; diff --git a/src/inc/trpc.h b/src/inc/trpc.h index 0532f1c12990779962e154cb91f868f1e7e0c91a..f849d15d06617ac8adef3c89a020c1423126b1d8 100644 --- a/src/inc/trpc.h +++ b/src/inc/trpc.h @@ -30,12 +30,15 @@ extern "C" { #define TAOS_CONN_HTTPS 4 #define TAOS_CONN_HTTPC 5 +#define TAOS_SOCKET_TYPE_NAME_TCP "tcp" +#define TAOS_SOCKET_TYPE_NAME_UDP "udp" + #define TAOS_ID_ASSIGNED 0 #define TAOS_ID_FREE 1 #define TAOS_ID_REALLOCATE 2 -#define TAOS_CONN_SOCKET_TYPE_S() ((tsUDPSocket == 1)? TAOS_CONN_UDPS:TAOS_CONN_TCPS) -#define TAOS_CONN_SOCKET_TYPE_C() ((tsUDPSocket == 1)? TAOS_CONN_UDP:TAOS_CONN_TCPC) +#define TAOS_CONN_SOCKET_TYPE_S() ((strcasecmp(tsSocketType, TAOS_SOCKET_TYPE_NAME_UDP) == 0)? TAOS_CONN_UDPS:TAOS_CONN_TCPS) +#define TAOS_CONN_SOCKET_TYPE_C() ((strcasecmp(tsSocketType, TAOS_SOCKET_TYPE_NAME_UDP) == 0)? TAOS_CONN_UDP:TAOS_CONN_TCPC) #define taosSendMsgToPeer(x, y, z) taosSendMsgToPeerH(x, y, z, NULL) #define taosOpenRpcChann(x, y, z) taosOpenRpcChannWithQ(x, y, z, NULL) diff --git a/src/util/src/tglobalcfg.c b/src/util/src/tglobalcfg.c index f26732e68835197ec4411a5f18bf54ebc79eb078..9fd065e90a11f19276ac534563822f3ab18650d8 100644 --- a/src/util/src/tglobalcfg.c +++ b/src/util/src/tglobalcfg.c @@ -122,8 +122,7 @@ int tsStreamCompRetryDelay = 10; // the stream computing delay int tsProjectExecInterval = 10000; // every 10sec, the projection will be executed once int64_t tsMaxRetentWindow = 24 * 3600L; // maximum time window tolerance -int tsUDPSocket = 1; // use UDP by default, if tsUDPSocket equals to 0, all connection use TCP socket - +char tsSocketType[4] = "udp"; // use UDP by default[option: udp, tcp] char tsHttpIp[TSDB_IPv4ADDR_LEN] = "0.0.0.0"; short tsHttpPort = 6020; // only tcp, range tcp[6020] // short tsNginxPort = 6060; //only tcp, range tcp[6060] @@ -500,8 +499,8 @@ void tsInitGlobalConfig() { TSDB_PASSWORD_LEN, TSDB_CFG_UTYPE_NONE); // socket type, udp by default - tsInitConfigOption(cfg++, "udpsocket", &tsUDPSocket, TSDB_CFG_VTYPE_INT, - TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW, 0, 1, 1, TSDB_CFG_UTYPE_NONE); + tsInitConfigOption(cfg++, "sockettype", tsSocketType, TSDB_CFG_VTYPE_STRING, + TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_SHOW, 0, 0, 3, TSDB_CFG_UTYPE_NONE); // locale & charset tsInitConfigOption(cfg++, "timezone", tsTimezone, TSDB_CFG_VTYPE_STRING,