Bonjours, j'ai un petit probleme que je n'arrive pas a gerer.
j'ai un client qui envois une requette et qui recoit une reponse du serveur imediatement. seulement le server ne recoit la reponse que lorsque je ferme la socket du client. voici le code client:
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
char rq[256];
   strcpy(rq,argv[3]);
   int sent=0;
   fprintf(stderr,"sending '%s'\n",rq);
   while(sent<strlen(rq))
   {
       res=send(sockfd,rq+sent,strlen(rq)-sent,0);
       if(res==-1)
       {
           close(sockfd);
           free(addr);
           return EXIT_FAILURE;
       }
       sent+=res;
   }
   fprintf(stderr,"receiving: ");
   char buffer[8192];
   memset(buffer,0,sizeof(buffer));
/*   while((res=recv(sockfd,buffer,8192-1,0))>0)
   {
       buffer[res]=0;
       puts(buffer);
       memset(&buffer,0,sizeof(buffer));
   }*/
    close(sockfd);
    free(addr);
en en levant les commentaires les deux programmes se plentent. mais avec les commentaire,
le serveur recoit bien le message envoye par le client mais la reponse n'arrive malheuresement jamais car le client n'est plus la.

cote serveur:
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
 
static int run_server()
{
    int conn_s,val=1;
    while(1)
    {
        if((conn_s=accept(glo_servSock,NULL,NULL))<0)
        {
            return -1;
        }
 
        char *cmd=readcmd(conn_s);
        val=fetchcmd(cmd,conn_s); // la reponse adequate est donne ici selon cmd
        free(cmd);
        close(conn_s);
        if(val==0)
            break;
    }
 
 
    return 0;
}
 
 
 
static char * readcmd(int Socket)
{
    char buffer[MAXBUFFER];
    unsigned int size=0;
    int res;
    char *result=(char*)malloc(sizeof(char));
    if(result==NULL)
    {
        return NULL;
    }
    strcpy(result,"\0");
 
    while((res=recv(Socket,buffer,MAXBUFFER-1,MSG_WAITALL))>0)
    {
        buffer[res]='\0';
        size+=res;
        char *ptr=(char*)realloc(result,sizeof(char)*(size+1));
        if(ptr==NULL)
        {
            free(result);
            result=NULL;
            break;
        }
        result=ptr;
        strcat(result,buffer);
        memset(buffer,0,res);
    }
 
    return result;
}
J'ai vu un truc comme TCP_DELAY mais je me souviens qu'avant j'avais ecris un code qui marchait la je comprend vraiment pas pourquoi rien de marche.