David Narvaez
unread,Apr 14, 2009, 12:18:46 AM4/14/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to boost...@lists.boost.org
Hi everyone, this (I think) is about boost::asio. Could somebody please tell me why in the following code my handle_write function is never called after the async_write? This tries to be an hybrid mixture of sync read and async write through a socket and even though the string gets written, no handler is called at the end.
#include <boost/asio.hpp>
#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/bind.hpp>
#include <iostream>
#include <string>
using boost::asio::ip::tcp;
using namespace std;
class Server : public boost::enable_shared_from_this<Server> {
public:
Server();
virtual ~Server();
void run(tcp::socket &);
void handle_write(const boost::system::error_code &, size_t);
};
Server::Server() {
}
Server::~Server() {
}
void Server::run(tcp::socket & sock) {
string message("Hi!");
try {
async_write(sock, boost::asio::buffer(message), boost::bind(
&Server::handle_write,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
} catch (exception& e) {
cerr << e.what() << endl;
}
return;
}
void Server::handle_write(const boost::system::error_code & errc, size_t bytes) {
cout << "Function called" << endl;
return;
}
int main() {
try {
boost::asio::io_service ioserv;
tcp::acceptor acceptor(ioserv, tcp::endpoint(tcp::v4(), 1337));
boost::shared_ptr<Server> newserver(new Server());
for (;;) {
tcp::socket newsocket(ioserv);
acceptor.accept(newsocket);
cout << "Somebody arrived" << endl;
newserver->run(newsocket);
}
} catch (exception& e) {
cerr << e.what() << endl;
}
return 0;
}