Send HTTP response using C socket

24,169

sizeof(reply) evaluates to the size of a char *, aka size of a pointer. Use strlen.

send(client, reply, strlen(reply), 0);
Share:
24,169
spe
Author by

spe

Updated on June 19, 2020

Comments

  • spe
    spe almost 4 years

    I`m trying to send HTTP response to browser

    char *reply = 
    "HTTP/1.1 200 OK\n"
    "Date: Thu, 19 Feb 2009 12:27:04 GMT\n"
    "Server: Apache/2.2.3\n"
    "Last-Modified: Wed, 18 Jun 2003 16:05:58 GMT\n"
    "ETag: \"56d-9989200-1132c580\"\n"
    "Content-Type: text/html\n"
    "Content-Length: 15\n"
    "Accept-Ranges: bytes\n"
    "Connection: close\n"
    "\n"
    "sdfkjsdnbfkjbsf";
    
    int sd = socket(PF_INET, SOCK_STREAM, 0);
    
    struct sockaddr_in addr;
    bzero(&addr, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8081);
    addr.sin_addr.s_addr = INADDR_ANY;
    
    if(bind(sd,&addr,sizeof(addr))!=0)
    {
        printf("bind error\n");
    }
    
    if (listen(sd, 16)!=0)
    {
        printf("listen error\n");
    }
    
    for(;;)
    {
        int size = sizeof(addr);
        int client = accept(sd, &addr, &size);
    
        if (client > 0)
        {
            printf("client connected\n");
            send(client, reply, sizeof(reply), 0);
        }
    }
    

    but my browser cant understand this, waits for a long time and then print smth strange. I guess my response is wrong, but I dont know how to fix. Any ideas?

  • spe
    spe about 13 years
    Damn! Stupid mistake. Thanks!