Bonjour,
J’ai une fonction appelée par un thread qui écoute et attends une connexion client.
La fonction est bloquée par accept() .
A la première fois tout se passe bien mais lorsque l’attente est trop longue : je tue le thread pour le redémarrer plus tard.
Les nouveaux threads débutent bien mais on ne réalise plus le listen ni l’attente client.
J’imagine que c’est parce que la socket n’a pas été fermée proprement et que j’ai alors un INVALID_SOCKET ou un SOCKET_ERROR.
Est-ce bien cela ?
Merci pour vos réponses et si vous pouvez me proposer une solution de contournement.
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 void * fn_Rxc(void * p_data) // Serveur { printf("Début tread Rx \n"); WSADATA wsa; WSAStartup(MAKEWORD(2,0),&wsa); SOCKET sock_attente; SOCKET sock_dialogue; SOCKADDR_IN csin; int len; // int port= xx; // affecté en variable globale csin.sin_family=AF_INET; csin.sin_addr.s_addr=htonl(INADDR_ANY); csin.sin_port=htons(port); sock_attente = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sock_attente == INVALID_SOCKET) return NULL; if (bind(sock_attente,(SOCKADDR*)&csin,sizeof(csin)) == SOCKET_ERROR) return NULL; printf("Listen...\n"); if (listen(sock_attente, 1) == SOCKET_ERROR) return NULL; len = sizeof(csin); printf("Attente client...\n"); sock_dialogue = accept(sock_attente, (SOCKADDR *)&csin, &len); if (sock_dialogue==INVALID_SOCKET) return NULL; printf("Connection en Serveur :\n"); return NULL; }
Partager