thread et sockets - C - Programmation
Marsh Posté le 17-05-2010 à 14:58:48
la seule façon que j'ai trouvé, c'est de passer en mode asynchrone non bloquant, d'utiliser un mutex pour accéder à la connexion, et d'utiliser select() pour faire patienter le thread en lecture.
Marsh Posté le 17-05-2010 à 10:31:07
Bonjour à tous,
Je suis en train de faire un client/serveur. Dans le serveur, j'aimerais y mettre 2 threads par connexion: l'une fait un fread() et attend des données du client (signaux), pendant que l'autre fait un fwrite() et envoie des données au client (évènements).
Le problème, c'est que la connexion, une socket réouverte avec fdopen(), n'est pas du tout thread safe: lorsque j'essaye de faire un fread() en même temps qu'un fwrite() le signal SIGABORT est levé au moment où le flux est fermé avec fclose().
J'ai essayé de dupliquer le flux d'entrée avec dup(), mais là encore, dup() ne fait qu'un alias, et fwrite() semble n'avoir aucun effet: les données ne sont pas reçues par le client, et ça replante avec SIGABORT. Il semble que celà ne devrait pas fonctionner car le flux créé par dup() partage par exemple la même position de tête de lecture.
Quelqu'un peut-t-il m'aider? Merci.
Code de la thread principale (fread) :
Code de la thread évènementielle (fwrite) :
Message édité par nargy le 17-05-2010 à 11:34:21