Forum Programmation.c Socket et bind

Posté par .
Tags : aucun
0
18
mai
2009
Bonsoir,

Celà fait un moment que je suis dessus, ne m’y connaissant pas trop j’ai appliqué plusieurs solutions glanées sur le net, mais rien à faire.

Je vous présente la partie du code en cause :
29 int listen_socket;
30 struct sockaddr_in localaddr;
31 printf("Network thread started\n");
32 listen_socket = socket(AF_INET, SOCK_STREAM, 0);
33 if(listen_socket == -1) {
34 printf("Error creating socket, aborting!\n");
35 return(0);
36 }
37 bzero(&localaddr, sizeof(struct sockaddr));
38 localaddr.sin_family = AF_INET;
39 int port = 12346;
40 localaddr.sin_port = htons(port);
41 localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
42 int test = bind(listen_socket, (struct sockaddr*)&localaddr, sizeof(struct sockaddr));
43 if(test == -1) {
44 printf("Error binding socket, aborting!\n");
45 printf("%s\n", strerror(errno));
46 return(0);
47 }
48 test = listen(listen_socket, 10);
49 if(!test) {
50 printf("Error listening socket, aborting!\n");
51 printf("%s\n", strerror(errno));
52 return(0);
53 }


Et le résultat que j’obtiens :
Error listening socket, aborting!
Success


Donc je ne m’en sors pas avec bind, de plus le code errno et le retour de bind sont contradictoires…

Où est mon erreur ?

Merci d’avance.
  • # Désolé…

    Posté par . Évalué à 2.

    … pour le dérangement, le code que j’au donnée est totalement faux. C’est corrigé. ^^
  • # Vrai ou faux ?

    Posté par (page perso) . Évalué à 2.

    Facile, tu teste pas correctement la valeur de retour de listen:
    !(test) est vrai, si et seulement si test est nul... Pas de pot, listen réussit exactement si sa valeur de retour est 0.
    En fait il faudrait écrire if(test) en version courte et pas forcement explicite, ou if(test!=0) en version longue et plus claire.
    • [^] # Re: Vrai ou faux ?

      Posté par . Évalué à 1.

      Yep, c’était la boulette. Pour ma défense… il se fait tard ! Bon du coup ça tourne nickel maintenant. Plus qu’à écrire la partie qui gèrera la requête du client… un autre jour. :)
  • # et aussi

    Posté par . Évalué à 2.

    50 printf("Error listening socket, aborting!\n");
    51 printf("%s\n", strerror(errno));

    devrait être, directement :

    50 printf("Listen Error %d : %s", errno, strerror(errno));

    car lors de l'appel à strerror(errno) sur la ligne 51 le "errno" (dû à l'appel à listen()) peut avoir été modifié par le premier printf().
    • [^] # Re: et aussi

      Posté par . Évalué à 1.

      et idem pour à chaque fois où tu veux afficher le strerror(errno ) en fait.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.