1. 程式人生 > >boost asio 多執行緒同步伺服器

boost asio 多執行緒同步伺服器

#include<iostream>
#include<stdlib.h>
#include<boost\asio.hpp>
#include<boost\thread.hpp>
using namespace std;
using namespace boost::asio;
void doing(boost::shared_ptr<ip::tcp::socket> sock);
int main(){

	typedef boost::shared_ptr<ip::tcp::socket> socket_ptr;
	io_service service;
	ip::tcp::endpoint ep(ip::tcp::v4(), 2001); // listen on 2001
	ip::tcp::acceptor acc(service, ep);
	while (true) 
	{
		socket_ptr sock(new ip::tcp::socket(service));
		acc.accept(*sock);
		boost::function0<void> f = boost::bind(doing,sock);
		boost::thread t(f);
		
	}
 
	system("pause");
	return 1;
}
void doing(boost::shared_ptr<ip::tcp::socket> sock)
{
	while (true) {
		try{
			char data[512];
			
			size_t len = sock->read_some(buffer(data));
			if (len > 0)
				write(*sock, buffer(data, len));
		}
		catch (boost::system::system_error e)
		{
			cout << e.code() << endl;
			return;
		}
		
	}
}