can you tell me why this does not count like I was expecting it to?
Code:
using boost::asio::ip::tcp;
const int max_length = 1024;
typedef boost::shared_ptr<tcp::socket> socket_ptr;
boost::thread *thListener;
void session(socket_ptr sock)
{
try
{
for (;;)
{
char data[max_length];
boost::system::error_code error;
size_t length = sock->read_some(boost::asio::buffer(data), error);
if (error == boost::asio::error::eof)
break; // Connection closed cleanly by peer.
else if (error)
throw boost::system::system_error(error); // Some other error.
boost::asio::write(*sock, boost::asio::buffer(data, length));
}
}
catch (std::exception& e)
{
std::cerr << "Exception in thread: " << e.what() << "\n";
}
}
void server(boost::asio::io_service& io_service, unsigned short port)
{
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
for (;;)
{
socket_ptr sock(new tcp::socket(io_service));
a.accept(*sock);
boost::thread t(boost::bind(session, sock));
}
}
Code:
void startListener()
{
cout << "thread started" << endl;
boost::asio::io_service io_service;
using namespace std; // For atoi.
server(io_service, 1501);
return;
}
int main()
{
thListener = new boost::thread{ &startListener };
for (int i = 0; i < 50000; ++i)
{
sleep(1000);
std::cout << i << '\n';
}
}
I was expecting that code to start the listener (on another thread) and then start counting but it never counts.