mirror of https://mirror.osredm.com/root/redis.git
Set SO_KEEPALIVE on client sockets if configured to do so.
This commit is contained in:
parent
ee21c18e5d
commit
124a635bc5
10
src/config.c
10
src/config.c
|
@ -81,6 +81,11 @@ void loadServerConfigFromString(char *config) {
|
||||||
if (server.maxidletime < 0) {
|
if (server.maxidletime < 0) {
|
||||||
err = "Invalid timeout value"; goto loaderr;
|
err = "Invalid timeout value"; goto loaderr;
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(argv[0],"tcp-keepalive") && argc == 2) {
|
||||||
|
server.tcpkeepalive = atoi(argv[1]);
|
||||||
|
if (server.tcpkeepalive < 0) {
|
||||||
|
err = "Invalid tcp-keepalive value"; goto loaderr;
|
||||||
|
}
|
||||||
} else if (!strcasecmp(argv[0],"port") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"port") && argc == 2) {
|
||||||
server.port = atoi(argv[1]);
|
server.port = atoi(argv[1]);
|
||||||
if (server.port < 0 || server.port > 65535) {
|
if (server.port < 0 || server.port > 65535) {
|
||||||
|
@ -528,6 +533,10 @@ void configSetCommand(redisClient *c) {
|
||||||
if (getLongLongFromObject(o,&ll) == REDIS_ERR ||
|
if (getLongLongFromObject(o,&ll) == REDIS_ERR ||
|
||||||
ll < 0 || ll > LONG_MAX) goto badfmt;
|
ll < 0 || ll > LONG_MAX) goto badfmt;
|
||||||
server.maxidletime = ll;
|
server.maxidletime = ll;
|
||||||
|
} else if (!strcasecmp(c->argv[2]->ptr,"tcp-keepalive")) {
|
||||||
|
if (getLongLongFromObject(o,&ll) == REDIS_ERR ||
|
||||||
|
ll < 0 || ll > INT_MAX) goto badfmt;
|
||||||
|
server.tcpkeepalive = ll;
|
||||||
} else if (!strcasecmp(c->argv[2]->ptr,"appendfsync")) {
|
} else if (!strcasecmp(c->argv[2]->ptr,"appendfsync")) {
|
||||||
if (!strcasecmp(o->ptr,"no")) {
|
if (!strcasecmp(o->ptr,"no")) {
|
||||||
server.aof_fsync = AOF_FSYNC_NO;
|
server.aof_fsync = AOF_FSYNC_NO;
|
||||||
|
@ -795,6 +804,7 @@ void configGetCommand(redisClient *c) {
|
||||||
config_get_numerical_field("maxmemory",server.maxmemory);
|
config_get_numerical_field("maxmemory",server.maxmemory);
|
||||||
config_get_numerical_field("maxmemory-samples",server.maxmemory_samples);
|
config_get_numerical_field("maxmemory-samples",server.maxmemory_samples);
|
||||||
config_get_numerical_field("timeout",server.maxidletime);
|
config_get_numerical_field("timeout",server.maxidletime);
|
||||||
|
config_get_numerical_field("tcp-keepalive",server.tcpkeepalive);
|
||||||
config_get_numerical_field("auto-aof-rewrite-percentage",
|
config_get_numerical_field("auto-aof-rewrite-percentage",
|
||||||
server.aof_rewrite_perc);
|
server.aof_rewrite_perc);
|
||||||
config_get_numerical_field("auto-aof-rewrite-min-size",
|
config_get_numerical_field("auto-aof-rewrite-min-size",
|
||||||
|
|
|
@ -59,6 +59,8 @@ redisClient *createClient(int fd) {
|
||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
anetNonBlock(NULL,fd);
|
anetNonBlock(NULL,fd);
|
||||||
anetEnableTcpNoDelay(NULL,fd);
|
anetEnableTcpNoDelay(NULL,fd);
|
||||||
|
if (server.tcpkeepalive)
|
||||||
|
anetKeepAlive(NULL,fd,server.tcpkeepalive);
|
||||||
if (aeCreateFileEvent(server.el,fd,AE_READABLE,
|
if (aeCreateFileEvent(server.el,fd,AE_READABLE,
|
||||||
readQueryFromClient, c) == AE_ERR)
|
readQueryFromClient, c) == AE_ERR)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1130,6 +1130,7 @@ void initServerConfig() {
|
||||||
server.dbnum = REDIS_DEFAULT_DBNUM;
|
server.dbnum = REDIS_DEFAULT_DBNUM;
|
||||||
server.verbosity = REDIS_NOTICE;
|
server.verbosity = REDIS_NOTICE;
|
||||||
server.maxidletime = REDIS_MAXIDLETIME;
|
server.maxidletime = REDIS_MAXIDLETIME;
|
||||||
|
server.tcpkeepalive = 0;
|
||||||
server.client_max_querybuf_len = REDIS_MAX_QUERYBUF_LEN;
|
server.client_max_querybuf_len = REDIS_MAX_QUERYBUF_LEN;
|
||||||
server.saveparams = NULL;
|
server.saveparams = NULL;
|
||||||
server.loading = 0;
|
server.loading = 0;
|
||||||
|
|
|
@ -698,6 +698,7 @@ struct redisServer {
|
||||||
/* Configuration */
|
/* Configuration */
|
||||||
int verbosity; /* Loglevel in redis.conf */
|
int verbosity; /* Loglevel in redis.conf */
|
||||||
int maxidletime; /* Client timeout in seconds */
|
int maxidletime; /* Client timeout in seconds */
|
||||||
|
int tcpkeepalive; /* Set SO_KEEPALIVE if non-zero. */
|
||||||
size_t client_max_querybuf_len; /* Limit for client query buffer length */
|
size_t client_max_querybuf_len; /* Limit for client query buffer length */
|
||||||
int dbnum; /* Total number of configured DBs */
|
int dbnum; /* Total number of configured DBs */
|
||||||
int daemonize; /* True if running as a daemon */
|
int daemonize; /* True if running as a daemon */
|
||||||
|
|
Loading…
Reference in New Issue