代码之家  ›  专栏  ›  技术社区  ›  Codeacula

不支持获取ai_socktype

  •  0
  • Codeacula  · 技术社区  · 16 年前

    我以前有过这样的工作,但我不知道如何工作,所以我正在尝试重写一些代码。

    除了尝试使用getaddrinfo()之外,一切似乎都很顺利,我得到的结果是-7,这转化为错误“a i_socktype not supported”。

    我敢打赌,这只是因为我仍然掌握着控球权。如果有人能解释我的错误,我会感激的。

    代码:

    #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 回复  |  直到 16 年前
        1
  •  1
  •   Codeacula    16 年前

    在回顾代码之后,我意识到我需要改变:

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

    到

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

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