TransWikia.com

Segfault en struct sockaddr_in c++

Stack Overflow en español Asked by Frijolito on December 24, 2020

Mi problema es simple ya tenia escrita una funcion que para hacer una petición get a un servidor mio, pero la borre y la volvi a escribir la cosa es que ahora me manda un segfault en esta parte

memset(&server_addr, 0, sizeof(server_addr));
server_addr->sin_family = AF_INET;
server_addr->sin_port = htons(80);
memcpy(&server_addr->sin_addr.s_addr, host->h_addr, host->h_length);

especificamente en la parte del memcpy y no se porque, en algunos foros vi que se deberia escribir esa parte de esta forma

memcpy(&server_addr.sin_addr.s_addr, host->h_addr, host->h_length);

cambiando el &server_addr->sin_addr.s_addr por el &server.sin_addr.s_addr, la verdad no se cual es el problema seguramente algo muy simple pero de todas formas no logro dar con el error

les dejo el código completo de todas formar

char*Requests::get(const char *url) { // url = localhost/path/test_path
    char *message = createGetPayload(url);
    char *response = (char *)malloc(sizeof(char)*8192); // Default size;
    int sock;
    struct hostent *host;
    struct sockaddr_in *server_addr;

    host = gethostbyname(getHost(url));
    if (host == NULL) {
        perror("Error: host not found n");
        exit(1);
    }

    memset(&server_addr, 0, sizeof(server_addr));
    server_addr->sin_family = AF_INET;
    server_addr->sin_port = htons(80);
    memcpy(&server_addr->sin_addr.s_addr, host->h_addr, host->h_length);

    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("Error: could not create socketn");
        exit(1);
    }

    if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
        perror("Error: could not connect with the servern");
        exit(1);
    }

    send(sock, message, strlen(message), 0);
    recv(sock, response, strlen(response), 0);

    return response;
}

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP