Problème socket bloquante

Fermé
baptou-fcsm Messages postés 2 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 14 juin 2013 - 14 juin 2013 à 16:34
Bonjour,

J'ai actuellement un problème avec une de mes méthodes dans ma socket : CServeurSocket::envoyer. A cause de celle-ci, je ne peux déduire la taille d'un de mes colis, mon trieur placé dans un SC12, ne calcule la taille que d'un seul colis.

J'aimerais savoir si il était possible de rendre ma socket non-bloquante afin de trier autant de colis que je le souhaite. Merci d'avance.

Main.cpp :

void main(void)
{
int taille;
unsigned char valeurPort;
unsigned short valTimer0;
char tabRecevoir[30];
valeurPort = 0;
CServeurSocket serveur(2500);
ctapis tapis;
BIOS_Set_Focus(FOCUS_APPLICATION);
cout << "\t*******Syst\x8Ame de tri de colis***********"<<endl;
cout << "\tCat\x082gorie 1 : Petit colis"<<endl;
cout << "\tCat\x082gorie 2 : Long colis"<<endl;
cout << "\tCat\x082gorie 3 : Grand colis"<<endl;
tapis.initialiser();
tapis.compteur();
if(serveur.AttendreConnexion()==true)
{
serveur.envoyer("Vous etes connecte", 20);
printf("Client connecte");
}
while(serveur.recevoir(tabRecevoir, 1)==0);
do
{
//while(serveur.recevoir(tabRecevoir, 1)==0);
if(tabRecevoir[0] == 'd')
{

do
{
while(tapis.testerbitPort600(CAPTEUR_ENTREE)==true);
tapis.demarrerTapis(&valeurPort);
while(tapis.testerbitPort600(CAPTEUR_BAS)== true);
valTimer0 = hal_read_timer_count(TIMER0, NULL);
while(tapis.testerbitPort600(CAPTEUR_BAS)== false);
valTimer0 = hal_read_timer_count(TIMER0, NULL)- valTimer0;
taille = valTimer0*3;
printf("\n--------------------------------------------------------------\n");
printf("taille : %d\n", taille);
//serveur.envoyer("\r\n taille : %d", taille);
if(tapis.testerbitPort600(CAPTEUR_HAUT)!= true)
{
printf(" Hauteur : 1\n");
printf(" Grand colis\n");
printf(" Catégorie 3\n\n");
tapis.trieur1Ouvert(&valeurPort);
tapis.trieur2Ouvert(&valeurPort);
serveur.envoyer("\r\nHaut", 7);
}
else
{
if(taille <= 20)
{
printf(" Hauteur : 0\n");
printf(" Petit colis\n");
printf(" Catégorie 1\n\n");
tapis.trieur1Ferme(&valeurPort);
serveur.envoyer("\r\nCourt", 7);
}
else
{
if(taille > 20)
{
printf(" Hauteur : 0\n");
printf(" Long colis\n");
printf(" Catégorie 2\n\n");
tapis.trieur1Ouvert(&valeurPort);
tapis.trieur2Ferme(&valeurPort);
serveur.envoyer("\r\nLong", 7);
}
}
}
serveur.recevoir(tabRecevoir, 1);
}
while(tabRecevoir[0] != 'a');
printf("Arret demande par le client\n");
tapis.arreterTapis(&valeurPort);
}
serveur.recevoir(tabRecevoir, 1);
}
while(tabRecevoir[0] != 'q');
printf("Fin de tri\n");
}



Méthode envoyer :

bool CServeurSocket::envoyer(const char * message, int nbOctets)
{
nbOctets = send(socketClient, (char *)message, nbOctets, 0, &error);

if(nbOctets == API_ERROR)
{
printf("\r\nTCPserver: Erreur d'envoi %d", error);
if(error == 258)
AttendreConnexion();
return false;
}
else
return true;
}