Skip to content

Commit

Permalink
redis-cli now supports automatically reconnection in interactive mode
Browse files Browse the repository at this point in the history
  • Loading branch information
antirez committed Aug 25, 2010
1 parent dda9365 commit 32241a0
Showing 1 changed file with 34 additions and 9 deletions.
43 changes: 34 additions & 9 deletions redis-cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include <errno.h>

#include "anet.h"
#include "sds.h"
Expand Down Expand Up @@ -65,11 +66,14 @@ static struct config {
static int cliReadReply(int fd);
static void usage();

static int cliConnect(void) {
/* Connect to the client. If force is not zero the connection is performed
* even if there is already a connected socket. */
static int cliConnect(int force) {
char err[ANET_ERR_LEN];
static int fd = ANET_ERR;

if (fd == ANET_ERR) {
if (fd == ANET_ERR || force) {
if (force) close(fd);
fd = anetTcpConnect(err,config.hostip,config.hostport);
if (fd == ANET_ERR) {
fprintf(stderr, "Could not connect to Redis at %s:%d: %s", config.hostip, config.hostport, err);
Expand Down Expand Up @@ -188,10 +192,18 @@ static int cliReadMultiBulkReply(int fd) {

static int cliReadReply(int fd) {
char type;
int nread;

if (anetRead(fd,&type,1) <= 0) {
if ((nread = anetRead(fd,&type,1)) <= 0) {
if (config.shutdown) return 0;
exit(1);
if (config.interactive &&
(nread == 0 || (nread == -1 && errno == ECONNRESET)))
{
return ECONNRESET;
} else {
printf("I/O error while reading from socket: %s",strerror(errno));
exit(1);
}
}
switch(type) {
case '-':
Expand Down Expand Up @@ -243,7 +255,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
if (!strcasecmp(command,"monitor")) config.monitor_mode = 1;
if (!strcasecmp(command,"subscribe") ||
!strcasecmp(command,"psubscribe")) config.pubsub_mode = 1;
if ((fd = cliConnect()) == -1) return 1;
if ((fd = cliConnect(0)) == -1) return 1;

/* Select db number */
retval = selectDb(fd);
Expand Down Expand Up @@ -438,9 +450,21 @@ static void repl() {
if (argc > 0) {
if (strcasecmp(argv[0],"quit") == 0 ||
strcasecmp(argv[0],"exit") == 0)
exit(0);
else
cliSendCommand(argc, argv, 1);
{
exit(0);
} else {
int err;

if ((err = cliSendCommand(argc, argv, 1)) != 0) {
if (err == ECONNRESET) {
printf("Reconnecting... ");
fflush(stdout);
if (cliConnect(1) == -1) exit(1);
printf("OK\n");
cliSendCommand(argc,argv,1);
}
}
}
}
/* Free the argument vector */
for (j = 0; j < argc; j++)
Expand Down Expand Up @@ -481,7 +505,8 @@ int main(int argc, char **argv) {
cliSendCommand(2, convertToSds(2, authargv), 1);
}

if (argc == 0 || config.interactive == 1) repl();
if (argc == 0) config.interactive = 1;
if (config.interactive) repl();

argvcopy = convertToSds(argc+1, argv);
if (config.argn_from_stdin) {
Expand Down

0 comments on commit 32241a0

Please sign in to comment.