voici un morceau choisi de mon code, avec :
sock le descripteur de la socket de connexion
sockcom la socket de communication qui en resulte.
Donc un code de server de base. Le souci , c'est que accept marche nickel pour la premiere requete entrante, me crée sockcom et tout parfait, mais apres cette première requete , sock prend la valeur [0] et je me retrouve avec accept qui me retourne ENOTSOCK (socket operation on non-socket).
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 /* creation de la socket */ if ( (sock = socket(AF_INET , SOCK_STREAM , 0 )) < 0 ) { perror("socket"); exit(1); } memset(&sin , 0 , sizeof(sin)); sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_port = htons(server_port); sin.sin_family = AF_INET; if ( bind(sock, (struct sockaddr *)&sin , sizeof(sin)) < 0 ){ perror("bind"); exit(1); } if (listen(sock , 5)==-1){ perror("listen"); exit(1); } while(1){ if ( (sockcom = accept( sock , (struct sockaddr*)&hp , &fromlen)) == -1 ){ perror("accept"); exit(1); } switch(fork()){ /* le fils travaille sur sockcom et ferme sock */ /* le pere ferme sockcom et ne fait rien d'autre */ } } /* while */
Un printf avant et apres accept met ça en évidence.
Quelqu'un a une idée ??
Merci







Répondre avec citation
Partager