提交 b93fdb7b 编写于 作者: A antirez

CLIENT KILL implemented

上级 3cd12b56
...@@ -870,15 +870,16 @@ void getClientsMaxBuffers(unsigned long *longest_output_list, ...@@ -870,15 +870,16 @@ void getClientsMaxBuffers(unsigned long *longest_output_list,
} }
void clientCommand(redisClient *c) { void clientCommand(redisClient *c) {
if (!strcasecmp(c->argv[1]->ptr,"list") && c->argc == 2) {
listNode *ln; listNode *ln;
listIter li; listIter li;
redisClient *client;
if (!strcasecmp(c->argv[1]->ptr,"list") && c->argc == 2) {
sds o = sdsempty(); sds o = sdsempty();
time_t now = time(NULL); time_t now = time(NULL);
listRewind(server.clients,&li); listRewind(server.clients,&li);
while ((ln = listNext(&li)) != NULL) { while ((ln = listNext(&li)) != NULL) {
redisClient *client;
char ip[32], flags[16], *p; char ip[32], flags[16], *p;
int port; int port;
...@@ -911,6 +912,26 @@ void clientCommand(redisClient *c) { ...@@ -911,6 +912,26 @@ void clientCommand(redisClient *c) {
} }
addReplyBulkCBuffer(c,o,sdslen(o)); addReplyBulkCBuffer(c,o,sdslen(o));
sdsfree(o); sdsfree(o);
} else if (!strcasecmp(c->argv[1]->ptr,"kill") && c->argc == 3) {
listRewind(server.clients,&li);
while ((ln = listNext(&li)) != NULL) {
char ip[32], addr[64];
int port;
client = listNodeValue(ln);
if (anetPeerToString(client->fd,ip,&port) == -1) continue;
snprintf(addr,sizeof(addr),"%s:%d",ip,port);
if (strcmp(addr,c->argv[2]->ptr) == 0) {
addReply(c,shared.ok);
if (c == client) {
client->flags |= REDIS_CLOSE_AFTER_REPLY;
} else {
freeClient(client);
}
return;
}
}
addReplyError(c,"No such client");
} else { } else {
addReplyError(c, "Syntax error, try CLIENT (LIST | KILL ip:port)"); addReplyError(c, "Syntax error, try CLIENT (LIST | KILL ip:port)");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册