Получение ai_socktype не поддерживается - PullRequest
0 голосов
/ 30 августа 2010

Раньше у меня это работало, но я не понял как, поэтому я пытаюсь переписать немного кода.

Кажется, все идет хорошо, кроме случаев, когда я пытаюсь использовать getaddrinfo (), Я получаю результат -7, который переводится в ошибку «ai_socktype не поддерживается».

Готов поспорить, что я просто все еще получаю указатель на указатели.Если кто-то может объяснить, как / где я иду не так, я был бы признателен.

Код:

#define PORT "4400"
typedef struct {
    int port;
    fd_set *connections;
    int connections_count;
    int listener;
    struct addrinfo *address;
    struct addrinfo *socket_hints;
} Server;

void initialize_server(Server *passed_server, char *port) {
    struct addrinfo *temp;
    int status; // Get addrinfo status

    // Set up the server hints
    passed_server->socket_hints = malloc(sizeof passed_server->socket_hints);
    passed_server->socket_hints->ai_family = AF_UNSPEC;
    passed_server->socket_hints->ai_socktype = SOCK_STREAM;
    passed_server->socket_hints->ai_flags = AI_PASSIVE;

    if((status = getaddrinfo(NULL, port, passed_server->socket_hints, &temp)) != 0) {
        fprintf(stderr, "Error with getaddrinfo: %s\n", gai_strerror(status));
    }
    printf("Result: %d\n", status);
}

int main(int argc, char** argv) {
    // Set up socket stuff
    Server *server = malloc(sizeof *server); // Set up the server
    initialize_server(server, PORT);

    return (EXIT_SUCCESS);
}

1 Ответ

1 голос
/ 30 августа 2010

После просмотра кода я понял, что мне нужно изменить:

passed_server->socket_hints = malloc(sizeof passed_server->socket_hints);

на

passed_server->socket_hints = malloc(sizeof *passed_server->socket_hints);

Я полагаю, это потому, что в первом я получаю размерячейки памяти (введите int).Во втором я возвращаю размер структуры, на которую указывает socket_hints.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...