我以前曾做过这项工作,但我不知道该如何做,因此我试图重写一些代码。
一切似乎都进行得很好,除非我尝试使用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);
}
最佳答案
回到代码后,我意识到我需要更改:
passed_server->socket_hints = malloc(sizeof passed_server->socket_hints);
至
passed_server->socket_hints = malloc(sizeof *passed_server->socket_hints);
我相信这是因为在第一个中,我得到的是内存位置的大小(类型为int)。在第二篇中,我返回socket_hints指向的结构的大小。