Bloqué sur un accept

Signaler
Messages postés
106
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
20 novembre 2009
-
Messages postés
106
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
20 novembre 2009
-
bonjour tt le mnd
erveur tcp en mfc je suis bloquer sur un accept qui foir mon programme
merci d'avance

8 réponses

Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
kelke explication serai les bienvenues!
Bloqué! c à d?
Messages postés
106
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
20 novembre 2009

voila les meilleurs explications::

void CtcpseqDoc::demarrage_serveur()


{


SOCKET slave;


SOCKET fd_socket;


struct sockaddr_in addr;


ZeroMemory(&addr,
sizeof(addr));


addr.sin_family=AF_INET;


addr.sin_port=htons(7000);


addr.sin_addr.s_addr=INADDR_ANY;


struct sockaddr_in client;


size_t clientlen=
sizeof(client);


fd_socket = socket(AF_INET,SOCK_STREAM,0);


if(fd_socket==-1)


{


MessageBox(0,"erreur socket","ERREUR",0);


exit(0);


}


if(bind(fd_socket,(
struct sockaddr*)&addr,
sizeof(addr))==-1)


{


MessageBox(0,"erreur bind","ERREUR",0);


exit(0);


}


if(listen(fd_socket,5)==-1)


{


MessageBox(0,"erreur listen","ERREUR",0);


exit(0);


}


slave=accept(fd_socket,(
struct sockaddr*)&client,(socklen_t*)&clientlen);


/*la plus rien le prog ce bloq et il ne veu plus rien entendre*/
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
OK,
c normal accepte (tout come recv ke tu utilisera certainement) est une fonction bloquante donc tant qu'il ya personne ça restera bloqué.
2 solutions.
-soit tu fait un Thread pour cette fonction et pend recv.
-soit tu param ton socket avec la fonction ioctlsocket(Socket, FIONBIO,1)

voili
a++;
Messages postés
106
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
20 novembre 2009

maintenant le accept marche mais retourne -1 on a opter pour le ioctlsocket(fd_socket, FIONBIO,&t); avant le while(1)

if(listen(fd_socket,5)==-1)


{


MessageBox(0,"erreur listen","ERREUR",0);


exit(0);


}


u_long t=1;


========>ioctlsocket(fd_socket, FIONBIO,&t);


while(1)


{


slave=accept(fd_socket,(
struct sockaddr*)&client,(socklen_t*)&clientlen);

et comment tu ferai avec un thread ???

merci
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
c normal qu'il te retourne -1 (et d'allieur ça peut etre un inconvégnant) l te retournera toujours -1 dés que quelqu'un se conecte il t'envoi alors le socket puis re -1 ...

PS a propos de la fonction recv() c la même chose! -1 quand rien n'est reçu et les nombres d'octet quand tu reçoit quelque chose
Messages postés
106
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
20 novembre 2009

ok g compri mai maintenant je galère a instantié mon thread
peut tu m'aider
merci
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
Désolé pour mon absence.Mais pas eu le temps de venir.
Quel est ton problème avec le Thread?
Messages postés
106
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
20 novembre 2009

dsl de repondre 2 semaine plus tard alors le probleme etai que il me refuser un parametre dans la fonction createthread alors g essayé avec afxbeginthread mais je capte pas trop commen l'initialiser
alors si tu pouvait me donner un petit ex de fonctionnement ce serai tres sympa
merci d'anvance