Bonjour,
J'ai un petit problème de client serveur sous linux.
Mon application est simple je souhaite envoyer un log sur le reseau tant que le client est connecté. J'ai un programme qui tourne bien sauf si c'est le serveur qui prend l'initiative de fermer la connexion.
Je souhaite savoir comment est ce que le serveur peut fermer les sockets clientes proprement c'est à dire sans que netstat me donne un état TIME_WAIT, et donc bind qui me jette dès que je relance mon serveur.
Merci d'avance.
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 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> int main(void) { int Sock_srv, Sock_clt; int length, i; struct sockaddr_in Addr_srv; struct sockaddr Addr_clt; if((Sock_srv = socket(AF_INET, SOCK_STREAM, 0)) < 0) return(-1); bzero(&Addr_srv, sizeof(Addr_srv)); Addr_srv.sin_family = AF_INET; Addr_srv.sin_addr.s_addr = INADDR_ANY; Addr_srv.sin_port = htons(6666); length = sizeof(Addr_srv); if (bind(Sock_srv,(struct sockaddr*)&Addr_srv, length) != 0) { close(Sock_srv); return(-1); } listen(Sock_srv, 1); bzero (&Addr_clt, sizeof(Addr_clt)); length = sizeof(Addr_clt); Sock_clt = accept(Sock_srv, &Addr_clt, (socklen_t*) &length); for(i=0; i < 20; i++) { if(write(Sock_clt, "123456789\r\n", strlen("123456789\r\n")) < 0) break; sleep(1); } close(Sock_clt); close(Sock_srv); return (0); }
Partager