bvk256
bvk256

Reputation: 1903

Can't read any data when connecting to Redis

I have the following code with connects to Redis running locally on port 6379. The problem is that can't read any output, the reader thread just blocks on recvfrom(). Everything works fine with an echo server for example, but not with Redis.

#include <stdio.h>     
#include <sys/socket.h> 
#include <arpa/inet.h>  
#include <stdlib.h>    
#include <string.h>    
#include <unistd.h>     
#include <pthread.h>

struct sockaddr_in servAddr;

int sock;

/* Reader loop */
void *readerf(void *n) {
   char buffer[128]; 
   int bytesRcvd;   
   while((bytesRcvd = recvfrom(sock, buffer, 127, 0, NULL, 0)) > 0) {
        printf("[%s]",buffer);        
   }
}

char *getk = "GET key\n";
char *setk = "SET key \"test\"\n";

void sendd(char *str) {
    if (send(sock, str, strlen(str), 0) != strlen(str))
        perror("Send error");
    send(sock, "\0", 1, 0);
    //printf("sent: [%s]",str);
}

int main(int argc, char *argv[]) {
    int i = 1;  

    if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
        return 1;

    /* Construct the server address structure */
    memset(&servAddr, 0, sizeof(servAddr));     /* Zero out structure */
    servAddr.sin_family      = AF_INET;             /* Internet address family */
    servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");   /* Server IP address */
    servAddr.sin_port        = htons(6379); /* Server port */
    if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr))<0)
        perror("Could not connect");    

    sendd(getk);
    sendd(setk);
    sendd(getk);    

    pthread_t reader;
    pthread_create(&reader, NULL, readerf, &i);

    sleep(5);
    close(sock);

    return 0;
}

Upvotes: 0

Views: 146

Answers (1)

seppo0010
seppo0010

Reputation: 15859

It seems like you are not properly implementing Redis' protocol: http://redis.io/topics/protocol

If you are seriously coding a client, and not just investigating/having fun consider hiredis: https://github.com/antirez/hiredis/

Upvotes: 1

Related Questions