不支持获取ai_socktype

时间:2010-08-29 21:46:44

标签: c sockets

我之前有过这个工作,但我不明白怎么做,所以我试图重写一些代码。

一切似乎都很顺利,除非我尝试使用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 个答案:

答案 0 :(得分:1)

回过头来看后,我意识到我需要改变:

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

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

我相信这是因为在第一个中我得到了内存位置的大小(类型为int)。在第二个中,我将返回socket_hints指向的struct的sizeof。