Bonjour,
Dans le cadre du développement d'un client MySQL, je cherche à savoir s'il existe une différence entre l'utilisation de "Unix.shutdown_connection" et "Unix.close" pour fermer la connexion.
Avec le programme d'exemple suivant :
Si j'observe le nombre de fichiers ouverts par le processus avec la commande "fstat" (sous système FreeBSD), je constate que ce nombre augmente constamment, comme si le socket n'était jamais fermé (?).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for i = 1 to 500000 do let addr = Unix.inet_addr_of_string "192.168.1.20" in let port = 3306 in let sockaddr = Unix.ADDR_INET(addr, port) in let (ic, oc) = Unix.open_connection sockaddr in let () = Unix.sleep 1 in let () = Unix.shutdown_connection ic in () done
Alors qu'avec ce programme :
où la seule différence est l'utilisation de "Unix.close" à la place de "Unix.shutdown_connection", le nombre de fichiers reste constant, ce qui semble indiquer que le socket est bien fermé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for i = 1 to 500000 do let addr = Unix.inet_addr_of_string "192.168.1.20" in let port = 3306 in let sockaddr = Unix.ADDR_INET(addr, port) in let (ic, oc) = Unix.open_connection sockaddr in let () = Unix.sleep 1 in let () = Unix.close (Unix.descr_of_in_channel ic) in () done
Pourquoi cette différence de comportement ?? "Unix.shutdown_connection" est-il nécessaire mais pas suffisant pour fermer un socket ?
Configuration utilisée : FreeBSD 9.1 et OCaml 4.00.0.
Stéphane.
Partager