私は現在、ブーストを試してみていじっています。単純なマルチスレッドエコーサーバーを作成しようとすると、エラーコード3で受信すると終了します。ドキュメントを何度も調べましたが、まだうまくいきません。私はそれがおそらく私が見落としている非常に単純なものであることを知っています。私はwinsockでまともな経験がありますが、Boostライブラリを学びたいと思います。
これが失敗したコードです
typedef boost::shared_ptr<tcp::socket> socket_ptr;
boost::asio::io_service io;
boost::array<char, 512> buf;
void startserver ( std::string host, std::string port )
{
tcp::acceptor a (io, tcp::endpoint(tcp::v4(), atoi(port.c_str())));
for(;;)
{
socket_ptr sock (new tcp::socket(io));
a.accept(*sock);
std::cout << sock->remote_endpoint() << std::endl;
boost::thread t (boost::bind(session, sock));
}
}
void session ( socket_ptr sock )
{
sock->send(boost::asio::buffer("welcome"),0,er);
size_t len;
for(;;)
{
len = sock->receive(boost::asio::buffer(buf));
sock->send(boost::asio::buffer(buf,len),0,er);
}
}
netcatで正常に接続でき、ウェルカムメッセージを受信しますが、受信するとすぐにクラッシュします。それぞれにboost::system :: error_codeを使用してエラーをキャッチしようとしましたが、何も返されませんでした