Bonjour,
J'ai code un serveur en C++ qui tourne en daemon sur ma machine. Il ecoute sur un socket AF_UNIX (local).
J'ai egalement apache avec php qui tournent sur cette meme machine.
Je lance un script php qui doit se connecter au socket et echanger des donnees avec un thread nouveau du serveur.
Le principe est le meme que HTTP : le script envoie une requete, et le serveur lui repond.
Le client et le serveur parviennent apparement a se connecter, mais se bloquent respectivement sur l'ecriture et la lecture.
Voici un bout de code pour situer le blocage sur les deux parties :
SERVEUR
Code :
char buffer[COM_BUFFER_LEN + 1]; bzero(buffer, (COM_BUFFER_LEN + 1) * sizeof(char)); int n; int size = 0; debuglog("Reading the socket..." ); while ((size < COM_BUFFER_LEN) && ((n = recv(socket, (void*) (buffer + size), COM_BUFFER_LEN, 0)) > 0)) // BLOQUE ICI =( { debuglog("fragment received. Trying to fetch another..." ); size += n; } if (n < 0) { Error e; e << "Couldn't read the socket"; throw e; }
|
CLIENT
Code :
$socket = stream_socket_client('unix://../../chatbot/socket', $errno, $errstr); if (!$socket) // Fail { if ($errno == 2) $errstr = 'ChatBot is offline'; ret($errstr . ' (' . $errno . ')', 1); } // Success // Send message $message = 'web_' . md5($_COOKIE['PHPSESSID']) . '\n' . $_POST['msg']; if (! fwrite($socket, $message)) // BLOQUE ICI =( { ret('Failed to write in the socket', 1); }
|
Ce n'est que lorsque j'eteins le demon que la page PHP se debloque et m'affiche l'erreur 'Failed to write in the socket', preuve que fwrite a foire.
Avez-vous deja eu ce probleme ? Je seche un peu...
Merci pour votre attention
Message édité par Pascal le nain le 02-08-2011 à 13:24:03