Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Socket et threads sur differents OS : bug ou comportement specifique à la plate forme? #8331

Closed
vicuna opened this issue Oct 22, 2003 · 2 comments
Labels

Comments

@vicuna
Copy link

vicuna commented Oct 22, 2003

Original bug ID: 1887
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

Soit le code source suivant:
##################################################
let send fd mes =
let m=(String.sub mes 0 8) in
Unix.send fd m 0 8 []

(* chaque client qui se connecte recoit dix messages
successifs *)
let loop_client (fd,addr)=
let i = ref 0 in
while (!i<10) do
Thread.delay 1.;
send fd ("message"^(string_of_int !i));
i:=!i+1
done

let start port_num =
let sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM
0 in
let sock_addr =
Unix.ADDR_INET(Unix.inet_addr_any, port_num) in
(
Unix.bind sock sock_addr ;
Unix.listen sock 12;

    while true do
        let (service_sock, client_sock_addr) =

Unix.accept sock in
Thread.create loop_client
(service_sock,client_sock_addr)
done
)

let _=
start 3500 ;
##################################################

J'utilise Ocaml 3.06 sur Mac OSX, freeBSD, une
Mandrake (un peu périmée) linux.
Je compile ce code avec ocamlc sur ces OS, et le teste
avec telnet.
Le comportement que j'en attend est que le client
telnet recoive successivement 10 messages du serveur
mais ça ne se produit que sous freeBSD. Avec les
autres OS, le client telnet ne recoit rien.
Ayant connaissance d'un ancien problème de
compatibilité des appels systèmes Unix avec les
thread, j'ai essayé en utilisant la desormais inutile
bibliothèque Threadunix évidemment sans succes.
J'ai egalement essaye en remplacant Unix.send par
Unix.write, et de forcer le flush sur le descripteur
en utilisant un canal, sans succes.
Je suis à court d'idées, et à court d'informations sur
l'implémentation des threads pour comprendre cette
différence de comportement.

Si jamais il ne s'agit pas d'un bug ou puis-je trouver
les informations nécessaires pour faire fonctionner ce
type de code comme je l'attend sous mac OSX?

Cordialement,

Anne-Gwenn Bosser


Do you Yahoo!?
The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com

@vicuna
Copy link
Author

vicuna commented Nov 6, 2003

Comment author: administrator

Soit le code source suivant:
[...]

J'utilise Ocaml 3.06 sur Mac OSX, freeBSD, une
Mandrake (un peu périmée) linux.
Je compile ce code avec ocamlc sur ces OS, et le teste
avec telnet.
Le comportement que j'en attend est que le client
telnet recoive successivement 10 messages du serveur
mais ça ne se produit que sous freeBSD.

J'ai teste en 3.07 sur MacOS X 10.2.8, et ca marche aussi.

-- Damien

@vicuna
Copy link
Author

vicuna commented Nov 6, 2003

Comment author: administrator

seems to be fixed in 3.07 - DD 2003-11-06

@vicuna vicuna closed this as completed Nov 6, 2003
@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant