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.