Bonjour bonjour, j'ai (encore et toujours) des probl�mes avec Asio

Je m'explique : j'ai lu et me suis inspir� de l'article de Pierre Schwartz (http://khayyam.developpez.com/articl.../architecture/), et je suis en train de r�aliser un jeu comportant un serveur, qui ne fait que �a (et non, comme dans l'article, un client qui joue aussi le r�le de serveur), et des clients qui s'y connectent. Autant pour le serveur que pour le client, j'utilise ceci pour mettre en place l'�coute sur le socket TCP, en ayant v�rifi� que le socket soit bien connect� avant :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
 
m_tcpSocket->async_receive(asio::buffer(m_networkBuffer), boost::bind(&NetworkMachine::tcpAsyncReceive, this, asio::placeholders::error, asio::placeholders::bytes_transferred));
asio::thread(boost::bind(&asio::io_service::run, &m_io));
Ensuite, ma fonction tcpAsyncReceive :
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
 
void NetworkMachine::tcpAsyncReceive(const asio::error_code& pE, size_t pBytesReceived) {
	std::cout << "tcpAsyncReceive size : " << m_networkBuffer.size() << std::endl;
	std::cout << "pE.value() : " << pE.value() << std::endl;
	if (pE.value() != 0) {
		EngineEvent e;
		e.m_type = EngineEvent::REMOVE_MACHINE;
		e.m_iData["ID"] = m_id;
		m_parent->pushReceivedEvent(e);
		return;
	}
	// let's deserialize the message
	if (m_networkBuffer.size() > 0) {
		std::string strData(&m_networkBuffer[0], m_networkBuffer.size());
		std::istringstream archiveStream(strData);
		boost::archive::text_iarchive archive(archiveStream);
 
		EngineEvent ne;
		archive >> ne;
 
		// add the event to the received event queue
		m_parent->pushReceivedEvent(ne);
		std::cout << "Something received from " << getNick() << " and added to NetworkEngine received queue." << std::endl;
	}
	return;
}
J'ai bien d'affich� "tcpAsyncReceive size : 0", 0 erreurs une premi�re fois � l'�tablissement de la connexion, puis... Plus rien, alors que le client continue d'�mettre des donn�es, et que le socket n'est pas ferm� (Ce que je sais pour la simple et bonne raison que si je quitte le serveur, le client me dit qu'il est d�connect�, mais pas avant).

Ma question est donc, ai-je oubli� quelque chose ? Faut-il remettre en place l'�coute apr�s que la fonction ait �t� appell�e une fois ?

Merci.