From: Pieter Noordhuis Date: Wed, 13 Oct 2010 16:55:46 +0000 (+0200) Subject: Merge master with resolved conflict in src/redis-cli.c X-Git-Url: https://git.saurik.com/redis.git/commitdiff_plain/b04ce2a35ce084a043ef8749ca4fa0e62b92bd03 Merge master with resolved conflict in src/redis-cli.c --- b04ce2a35ce084a043ef8749ca4fa0e62b92bd03 diff --cc src/redis-cli.c index 4dafba32,5071604b..8866678b --- a/src/redis-cli.c +++ b/src/redis-cli.c @@@ -52,10 -54,8 +54,9 @@@ static struct config { char *hostip; int hostport; + char *hostsocket; long repeat; int dbnum; - int argn_from_stdin; int interactive; int shutdown; int monitor_mode; @@@ -72,22 -77,11 +78,19 @@@ 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 (config.hostsocket == NULL) { + fd = anetTcpConnect(err,config.hostip,config.hostport); + } else { + fd = anetUnixConnect(err,config.hostsocket); - if (fd == ANET_ERR) { - fprintf(stderr, "Could not connect to Redis at %s: %s", config.hostsocket, err); - return -1; - } + } if (fd == ANET_ERR) { - fprintf(stderr, "Could not connect to Redis at %s:%d: %s", config.hostip, config.hostport, err); + fprintf(stderr,"Could not connect to Redis at "); + if (config.hostsocket == NULL) + fprintf(stderr,"%s:%d: %s",config.hostip,config.hostport,err); + else + fprintf(stderr,"%s: %s",config.hostsocket,err); return -1; } anetTcpNoDelay(NULL,fd); @@@ -361,10 -391,9 +403,9 @@@ static sds readArgFromStdin(void) } static void usage() { - fprintf(stderr, "usage: redis-cli [-iv] [-h host] [-p port] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 arg3 ... argN\n"); + fprintf(stderr, "usage: redis-cli [-iv] [-h host] [-p port] [-s /path/to/socket] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 arg3 ... argN\n"); - fprintf(stderr, "usage: echo \"argN\" | redis-cli -c [-h host] [-p port] [-s /path/to/socket] [-a authpw] [-r repeat_times] [-n db_num] cmd arg1 arg2 ... arg(N-1)\n"); - fprintf(stderr, "\nIf a pipe from standard input is detected this data is used as last argument.\n\n"); - fprintf(stderr, "example: cat /etc/passwd | redis-cli set my_passwd\n"); + fprintf(stderr, "usage: echo \"argN\" | redis-cli -x [options] cmd arg1 arg2 ... arg(N-1)\n\n"); + fprintf(stderr, "example: cat /etc/passwd | redis-cli -x set my_passwd\n"); fprintf(stderr, "example: redis-cli get my_passwd\n"); fprintf(stderr, "example: redis-cli -r 100 lpush mylist x\n"); fprintf(stderr, "\nRun in interactive mode: redis-cli -i or just don't pass any command\n"); @@@ -480,13 -474,10 +486,11 @@@ int main(int argc, char **argv) config.hostip = "127.0.0.1"; config.hostport = 6379; + config.hostsocket = NULL; config.repeat = 1; config.dbnum = 0; - config.argn_from_stdin = 0; - config.shutdown = 0; config.interactive = 0; + config.shutdown = 0; config.monitor_mode = 0; config.pubsub_mode = 0; config.raw_output = 0; diff --cc src/redis.h index 38f0c140,3e9fc236..8e05a4d4 --- a/src/redis.h +++ b/src/redis.h @@@ -329,12 -338,10 +338,13 @@@ struct sharedObjectsStruct struct redisServer { pthread_t mainthread; int port; - int fd; + char *bindaddr; + char *unixsocket; + int ipfd; + int sofd; redisDb *db; long long dirty; /* changes to DB from the last save */ + long long dirty_before_bgsave; /* used to restore dirty on failed BGSAVE */ list *clients; list *slaves, *monitors; char neterr[ANET_ERR_LEN]; @@@ -577,10 -595,11 +597,12 @@@ void resetClient(redisClient *c) void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask); void sendReplyToClientWritev(aeEventLoop *el, int fd, void *privdata, int mask); void addReply(redisClient *c, robj *obj); + void *addDeferredMultiBulkLength(redisClient *c); + void setDeferredMultiBulkLength(redisClient *c, void *node, long length); void addReplySds(redisClient *c, sds s); void processInputBuffer(redisClient *c); -void acceptHandler(aeEventLoop *el, int fd, void *privdata, int mask); +void acceptTcpHandler(aeEventLoop *el, int fd, void *privdata, int mask); +void acceptUnixHandler(aeEventLoop *el, int fd, void *privdata, int mask); void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask); void addReplyBulk(redisClient *c, robj *obj); void addReplyBulkCString(redisClient *c, char *s);