bonjour !

Je suis etudiant en informatique, et dans le cadre d'un projet, je dois réaliser une communication entre des wifibots. Pour ceci je passe par l'utilisation de socket en TCP. Je compile en borland C++ v5.02 et j'inclue la splendide librairie dos.h

Or la fonction accept bloque le reste du programme j'ai l'impression, car rien ne se fait apres l'execution de cette fonction, et le terminal (telnet) me rend la main. Cependant, le programme continue de tourner en arriere plan vu qu'il est toujours dans la memoire et continue de bloquer le port ouvert.

Le coté client est programmé en C++ avec la librairie QT (QTCPsocket, etc ...). Mon appli fonctionne correctement en ce qui concerne la connexion, puisqu'avec le programme fourni avec wifibot (dont je n'ai pas le code), j'arrive a me connecter. J'ai fait plusieures tentative dont une boucle infini autour du accept, un réarrangement de la fonction qui prenait un int *error au lieu de int *longueur, mais rien ne fonctionne. Une idée quelqu'un ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
struct sockaddr_in   addr;
   struct sockaddr_in   claddr;
 
   int sd,asd,established,i,retval,error,lg;
 
   retval = opensocket( SOCK_STREAM, &error );
 
   if(retval == API_ERROR)//API_ERROR = -1, voir TCPIPAPI.h
   {
	    printf("\r\nSocket open failed: %d",error);
	    goto TCP_SERVER_DONE;
   }
   else
   {
	    sd = retval;
   }
 
   addr.sin_family =  PF_INET;
   //convert your sending port to correct byte order
	retval = htons(TM_PORT_ECHO);
 
   addr.sin_port =  retval;
   addr.sin_addr.s_addr =  0L;
 
   retval = bind( sd, (struct sockaddr *) &addr, &error );
 
   if(retval == API_ERROR)
   {
	    printf("\r\nTCPserver: Socket bind failed: %d",error);
	    goto TCP_SERVER_DONE;
   }
 
   while(1)   //do forever
   {
 
     printf("\r\nTCPserver: Listening for connection on socket");
     retval = listen( sd, 1, &error );// 1 -> nb max de connections écoutées en meme temps
 
        if(retval == API_ERROR)// !=-1
        {
	         printf("\r\nTCPserver: Socket listen failed: %d",error);
	         goto TCP_SERVER_DONE;
        }
 
     claddr.sin_family      =  PF_INET;
     claddr.sin_port        =  0;
     claddr.sin_addr.s_addr =  0L;
     lg = sizeof(struct sockaddr);
     retval = accept( sd, (struct sockaddr *) &claddr, &lg );
/*avant la fonction avait &error au lieu de &lg*/
     if(retval == API_ERROR)
     {
	      printf("\r\nTCPserver: Socket accept failed: %d",error);
	      goto TCP_SERVER_DONE;
     }