Je l'ai eu fonctionnait précédemment, mais je n'ai pas compris comment, alors j'essaye de réécrire un peu de code.Obtenir ai_socktype non pris en charge
Tout semble aller bien, sauf quand j'essaie d'utiliser getaddrinfo(), je récupère un résultat de -7, ce qui se traduit par l'erreur "ai_socktype non supporté".
Je suis prêt à parier que c'est simplement moi qui maîtrise les pointeurs. Si quelqu'un peut expliquer comment/où je me trompe, j'apprécierais.
Le code:
#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);
}
Pourquoi avez-vous 'malloc()' les indices du tout? Utilisez juste un local de type 'struct addrinfo' et prenez l'adresse de celui-ci quand vous le passez à' getaddrinfo() '. Aussi, vous voulez probablement faire quelque chose comme 'memset (& hints, 0, sizeof (hints))' pour vous assurer que tous les autres champs ont été mis à zéro. –
Je changeais juste ça, en fait. J'ai réalisé que je n'avais pas besoin de les faire pointer car il n'y a aucune raison de le faire en premier lieu. Et fera pour l'indice memset. – Codeacula