Folgender Code funktioniert:
Code:
/*
    gcc -ansi -W -Wall -o search search.c
*/

#ifdef _WIN32
    #include <winsock2.h>
    #define CLOSESOCKET(x) closesocket(x)
#else
    #include <arpa/inet.h>
    #include <netdb.h>
    #define CLOSESOCKET(x) close(x)
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <unistd.h>

#define HOST "www.google.com"
#define PORT 80
#define SEARCH "http"
#define OUTPUT "search.html"
#define BUFFSZ 100


void putError(const char *, ...);
int vsnprintf(char *, size_t, const char *, va_list);

int main(void)
{
    int sock;
    int recved;
    char buffer[BUFFSZ + 1];
    const char *request = 
        "GET /search?hl=en&q=" SEARCH " HTTP/1.1\r\n"
        "Host: " HOST "\r\n"
        "User-Agent: BlackBerry\r\n"
        "Connection: close\r\n"
        "\r\n";
    struct sockaddr_in addr;
    struct hostent *dns;
    FILE *fp;
    
    #ifdef _WIN32
        WSADATA wsa;
        if (WSAStartup(MAKEWORD(2, 0), &wsa) == -1)
            putError("couldn't start winsock");
    #endif
    
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        putError("couldn't create a socket");
    
    if (!(dns = gethostbyname(HOST)))
        putError("couldn't resolve the correct ip for '" HOST "'");
    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    memcpy(&addr.sin_addr.s_addr, dns->h_addr_list[0], 4);
    
    if (connect(sock, (struct sockaddr *) &addr, sizeof(addr)) == -1)
        putError("couldn't connect to '" HOST "'");
    
    send(sock, request, strlen(request), 0);
    
    if (!(fp = fopen(OUTPUT, "wb")))
        putError("couldn't write to '" OUTPUT "'");
    
    memset(buffer, 0, BUFFSZ + 1);
    while(send(sock, "", 0, 0) != -1)
    {
        if ((recved = recv(sock, buffer, BUFFSZ, 0)) <= 0)
            break;
        fwrite(buffer, 1, recved, fp);
    }
    
    fclose(fp);
    CLOSESOCKET(sock);
    #ifdef _WIN32
        WSACleanup();
    #endif
    
    return 0;
}

void putError(const char *errmsg, ...)
{
    char buffer[400];
    va_list arg;
    va_start(arg, errmsg);
    vsnprintf(buffer, sizeof(buffer) - 1, errmsg, arg);
    va_end(arg);
    printf("[Error]\t\t%s\n", buffer);
    exit(0);
}
PS: es heißt "Code" und nicht "cood"!