Je suis novice en matière de programmation de socket et j'essaie ici de configurer une simple socket serveur et de l'écouter. Voici mon code.La liaison a échoué: Descripteur de fichier incorrect
int server_socket, client_socket, sent;
size_t len;
struct sockaddr_in server, client;
char msg[] = "Hello to the world of socket programming";
server_socket == socket(AF_INET, SOCK_STREAM, 0);
if(server_socket == -1){
perror("Socket creation failed: ");
exit(-1);
}
//define server
server.sin_family = AF_INET;
server.sin_port = htons(10000);
server.sin_addr.s_addr = INADDR_ANY;
memset(&server.sin_zero, '\0', 8);
len = sizeof(struct sockaddr_in);
if((bind(server_socket, (struct sockaddr*)&server, len)) == -1){
perror("Bind failed: ");
exit(-1);
}
if(listen(server_socket, 5) == -1){
perror("Listen failed: ");
exit(-1);
}
while(true){
if((client_socket = accept(server_socket, (struct sockaddr *)&client, (socklen_t *)&len)) == -1){
perror("Accept failed: ");
exit(-1);
}
sent = send(client_socket, msg, strlen(msg), 0);
printf("Sent %d byte to client: %s\n", sent, inet_ntoa(client.sin_addr));
close(client_socket);
}
Je continue à obtenir
Bind Failed : Bad file descriptor
Cependant, mon descripteur de fichier est exactement selon le guide de beej. De l'aide?
cette ligne: 'memset (& server.sin_zero, '\ 0', 8);' est très 'iffy'. mieux vaut (avant de définir des champs dans memset 'server' (& server, '\ 0', sizeof (server)), et supprimer l'appel en cours à memset() – user3629249
Avez-vous #include tous les fichiers d'en-tête nécessaires? le code manque: info: stdio.h stdlib.h sys/types.h sys/socket.h netinet/in.h arpa/inet.h et peut-être quelques autres Avez-vous compilé le code avec tous les avertissements activés ? (pour gcc, à une utilisation minimale: '-Wall -Wextra -pedantic') – user3629249